Oracle does not distinguish between empty string and NULL .
This is why the recommended row data type is VARCHAR2 rather than VARCHAR : the latter should make this distinction, but currently does not.
In the trivalent logic used by SQL , NULL = NULL (which is a synonym for '' = '' in Oracle) is evaluated as NULL (not FALSE , but NULL ) and therefore WHERE filtered.
source share