http://en.wikipedia.org/wiki/Null_(SQL)Data Manipulation Language
SQL three-valued logic is encountered in
Data Manipulation Language (DML) in comparison predicates of DML statements and queries. The
WHERE
clause causes the DML statement to act on only those rows for which the predicate evaluates to True. Rows for which the predicate evaluates to either False or Unknown are not acted on by
INSERT
,
UPDATE
, or
DELETE
DML statements, and are discarded by
SELECT
queries. Interpreting Unknown and False as the same logical result is a common error encountered while dealing with Nulls.
[2] The following simple example demonstrates this fallacy:
SELECT *
FROM t
WHERE i = NULL;
The example query above logically always returns zero rows because the comparison of the
i column with Null always returns Unknown, even for those rows where
i is Null. The Unknown result causes the
SELECT
statement to summarily discard each and every row. (However, in practice, some SQL tools will retrieve rows using a comparison with Null.)