COALESCE is een modernere functie die deel uitmaakt van ANSI-92 standaard.
NVL is Oracle specifiek, het werd geïntroduceerd in 80 's voordat er normen waren.
In het geval van twee waarden zijn het synoniemen.
Ze worden echter anders geïmplementeerd.
NVL evalueert altijd beide argumenten, terwijl COALESCE stopt meestal de evaluatie wanneer het de eerste niet-NULL . vindt (er zijn enkele uitzonderingen, zoals volgorde NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Dit duurt bijna 0.5 seconden, omdat het SYS_GUID() . genereert 's, ondanks 1 geen NULL zijn .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Dit begrijpt dat 1 is geen NULL en evalueert het tweede argument niet.
SYS_GUID 's worden niet gegenereerd en de zoekopdracht is direct.