COALESCE er mere moderne funktion, der er en del af ANSI-92 standard.
NVL er Oracle specifik, den blev introduceret i 80 før der var nogen standarder.
I tilfælde af to værdier er de synonymer.
De implementeres dog anderledes.
NVL evaluerer altid begge argumenter, mens COALESCE stopper normalt evalueringen, når den finder den første ikke-NULL (der er nogle undtagelser, såsom sekvens NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Dette kører i næsten 0.5 sekunder, da den genererer SYS_GUID() 's, på trods af 1 er ikke en NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Dette forstår, at 1 er ikke en NULL og evaluerer ikke det andet argument.
SYS_GUID 's genereres ikke, og forespørgslen er øjeblikkelig.