COALESCE è una funzione più moderna che fa parte di ANSI-92 standard.
NVL è Oracle specifico, è stato introdotto in 80 prima che esistessero degli standard.
In caso di due valori, sono sinonimi.
Tuttavia, sono implementati in modo diverso.
NVL valuta sempre entrambi gli argomenti, mentre COALESCE di solito interrompe la valutazione ogni volta che trova il primo non NULL (ci sono alcune eccezioni, come la sequenza NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Funziona per quasi 0.5 secondi, poiché genera SYS_GUID() 's, nonostante 1 non essendo un NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Questo comprende che 1 non è un NULL e non valuta il secondo argomento.
SYS_GUID non vengono generati e la query è istantanea.