
Agora que estamos usando o BEFORE, colocar " id <> NEW.id" não é mais necessário, certo?
Porque, pelo que eu entendi, os novos valores não são inseridos no início. A função faz todas as checagens e só depois insere os valores.

Agora que estamos usando o BEFORE, colocar " id <> NEW.id" não é mais necessário, certo?
Porque, pelo que eu entendi, os novos valores não são inseridos no início. A função faz todas as checagens e só depois insere os valores.
Ei, Leonardo! Tudo bem?
Você está no caminho certo!
Em um trigger BEFORE INSERT, a variável NEW contém os dados do registro que está prestes a ser inserido, mas esse registro ainda não existe na tabela. O trigger é executado antes da inserção, permitindo que você verifique ou modifique os valores de NEW antes que eles sejam gravados. Como o registro não está na tabela durante a execução do trigger, qualquer consulta à tabela não inclui os dados de NEW. Então não há necessidade de usar id <> NEW.id para excluir o registro atual da consulta, já que ele simplesmente não está lá.
Por outro lado, em um trigger BEFORE UPDATE ou AFTER UPDATE, o registro já existe na tabela antes da atualização. Ao fazer uma consulta à tabela, como buscar o maior salário, o registro atual (com NEW.id) pode interferir no resultado se não for excluído. Aí, a condição id <> NEW.id é usada para ignorar o registro que está sendo atualizado, garantindo que a consulta considere apenas os outros registros.
Espero ter ajudado e qualquer dúvida, compartilhe no fórum.
Até mais, Leonardo!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado!