如果NOT
IN
操作后的列表中的任何项目求值为null,则所有行的求值为FALSE
或UNKNOWN
,并且不返回任何行。例如,以下语句True
为每一行返回字符串“ ”:
从员工中选择“真”
WHERE department_id NOT IN(10,20);
但是,以下语句不返回任何行:
从员工中选择“真”
WHERE department_id NOT IN(10,20,NULL);
前面的示例不返回任何行,因为WHERE
子句条件的计算结果为:
department_id!= 10 AND department_id!= 20 AND department_id!=空
由于第三个条件department_id
与null进行比较,因此结果为UNKNOWN
,因此将得出整个表达式FALSE
(对于department_id
等于10或20的行)。这种行为很容易被忽略,尤其是当NOT
IN
操作员引用一个子查询时。