Because NULL = NULL simply unknown. Perhaps a third state? It is not TRUE or FALSE .
Oracle treats EMPTY STRING as NULL.
nvl(mycol, '') makes no real sense, since you are returning NULL to NULL and comparing it again with NULL.
SQL> WITH DATA AS( 2 SELECT 1 val, 'NULL' str FROM dual UNION ALL 3 SELECT 2, NULL str FROM dual UNION ALL 4 SELECT 3, '' str FROM dual UNION ALL 5 SELECT 4, 'some value' str FROM dual) 6 SELECT val, NVL(str, 'THIS IS NULL') FROM data WHERE str IS NULL 7 / VAL NVL(STR,'THI ---------- ------------ 2 THIS IS NULL 3 THIS IS NULL SQL>
source share