如果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操作员引用一个子查询时。