COALESCE е по-модерна функция, която е част от ANSI-92 стандартно.
NVL е Oracle специфично, той беше въведен в 80 е преди да има някакви стандарти.
В случай на две стойности те са синоними.
Те обаче се изпълняват по различен начин.
NVL винаги оценява и двата аргумента, докато COALESCE обикновено спира оценката, когато открие първия не-NULL (има някои изключения, като последователност NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Това работи за почти 0.5 секунди, тъй като генерира SYS_GUID() 's, въпреки 1 не е NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Това разбира, че 1 не е NULL и не оценява втория аргумент.
SYS_GUID 's не се генерират и заявката е мигновена.