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.