COALESCE là chức năng hiện đại hơn, là một phần của ANSI-92 tiêu chuẩn.
NVL là Oracle cụ thể, nó đã được giới thiệu trong 80 trước khi có bất kỳ tiêu chuẩn nào.
Trong trường hợp có hai giá trị, chúng là từ đồng nghĩa.
Tuy nhiên, chúng được triển khai khác nhau.
NVL luôn đánh giá cả hai đối số, trong khi COALESCE thường dừng đánh giá bất cứ khi nào nó tìm thấy không phải NULL đầu tiên (có một số ngoại lệ, chẳng hạn như trình tự NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Điều này chạy gần như 0.5 giây, vì nó tạo SYS_GUID() của, mặc dù 1 không phải là NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Điều này hiểu rằng 1 không phải là NULL và không đánh giá đối số thứ hai.
SYS_GUID không được tạo và truy vấn là tức thì.