COALESCE es una función más moderna que forma parte de ANSI-92 estándar.
NVL es Oracle específico, se introdujo en 80 's antes de que hubiera estándares.
En caso de dos valores, son sinónimos.
Sin embargo, se implementan de manera diferente.
NVL siempre evalúa ambos argumentos, mientras que COALESCE por lo general, detiene la evaluación cada vez que encuentra el primer no NULL (hay algunas excepciones, como la secuencia NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Esto se ejecuta durante casi 0.5 segundos, ya que genera SYS_GUID() 's, a pesar de 1 no siendo un NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Esto entiende que 1 no es un NULL y no evalúa el segundo argumento.
SYS_GUID no se generan y la consulta es instantánea.