A principal diferença entre os dois é que
IFNULL
função recebe dois argumentos e retorna o primeiro se não for NULL
ou o segundo se o primeiro for NULL
. COALESCE
A função pode receber dois ou mais parâmetros e retornar o primeiro parâmetro não NULL, ou NULL
se todos os parâmetros forem nulos, por exemplo:SELECT IFNULL('some value', 'some other value');
-> returns 'some value'
SELECT IFNULL(NULL,'some other value');
-> returns 'some other value'
SELECT COALESCE(NULL, 'some other value');
-> returns 'some other value' - equivalent of the IFNULL function
SELECT COALESCE(NULL, 'some value', 'some other value');
-> returns 'some value'
SELECT COALESCE(NULL, NULL, NULL, NULL, 'first non-null value');
-> returns 'first non-null value'
ATUALIZAÇÃO: O MSSQL faz uma verificação mais rigorosa de tipos e parâmetros. Além disso, não tem
IFNULL
função, mas em vez disso ISNULL
função, que precisa conhecer os tipos dos argumentos. Portanto:SELECT ISNULL(NULL, NULL);
-> results in an error
SELECT ISNULL(NULL, CAST(NULL as VARCHAR));
-> returns NULL
Também
COALESCE
função no MSSQL requer que pelo menos um parâmetro seja não nulo, portanto:SELECT COALESCE(NULL, NULL, NULL, NULL, NULL);
-> results in an error
SELECT COALESCE(NULL, NULL, NULL, NULL, 'first non-null value');
-> returns 'first non-null value'