SELECT * FROM hr.NullValueCheck
ID Name 1 abc 2 abc 3 bcd 4 cde
https://oracle-base.com/articles/misc/all-any-some-comparison-conditions-in-sql
Query 1 :
SELECT * FROM hr.NullValueCheck where id > All (SELECT NULL FROM DUAL )
Nothing is coming.
But for below quesry. All records are coming while subquesry is returning is NULL same as like above query (SELECT NULL FROM DUAL )
Query 2:
SELECT * FROM hr.NullValueCheck where id > All (SELECT id from hr.NullValueCheck where id = 5)
Please explain me why Query 1 is returning No Records but Query 2 is returning all records.
As per my knowledge Query 1 should also return all records.
Advertisement
Answer
NULL is different from an empty set.
The first example is saying: “select all rows where the id is greater than all values of NULL“. Or more simply, “where id is greater than ‘NULL’`.
In SQL, 'NULL' generally has the semantics of “not known”. If you don’t know the value, then you don’t know if a given id is larger. Hence, no rows are returned.
In the second example, instead has an empty set for comparison. An empty set is not NULL. Obviously, any number is greater than all numbers in an empty set. Hence, all rows are returned.