COALESCE je modernější funkce, která je součástí ANSI-92 standardní.
NVL je Oracle specifický, byl představen v 80 's dříve, než existovaly nějaké standardy.
V případě dvou hodnot se jedná o synonyma.
Jsou však implementovány odlišně.
NVL vždy vyhodnotí oba argumenty, zatímco COALESCE obvykle zastaví vyhodnocování vždy, když najde první neNULL (Existují některé výjimky, například sekvence NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Toto běží za téměř 0.5 sekund, protože generuje SYS_GUID() 's, navzdory 1 není NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
To znamená, že 1 není NULL a nevyhodnocuje druhý argument.
SYS_GUID 's nejsou generovány a dotaz je okamžitý.