COALESCE é uma função mais moderna que faz parte do ANSI-92 padrão. NVL é Oracle específico, foi introduzido em 80 antes de haver quaisquer padrões. No caso de dois valores, eles são sinônimos.
No entanto, eles são implementados de forma diferente.
NVL sempre avalia ambos os argumentos, enquanto COALESCE geralmente interrompe a avaliação sempre que encontra o primeiro não-NULL (há algumas exceções, como a sequência NEXTVAL ):SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Isso é executado por quase
0.5 segundos, pois gera SYS_GUID() 's, apesar de 1 não sendo um NULL . SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Isso entende que
1 não é um NULL e não avalia o segundo argumento. SYS_GUID 's não são gerados e a consulta é instantânea.