SQL not in 疑惑

在sql查詢中,
select *
from t1
where c not in (select c2 from t2)

如果t2中有c2有null的話,這句話就有可能執行的結果爲,
只有在子查詢必須過濾掉NULL值才正常
select *
from t1
where c not in (select c2 from t2 where c2 is not null)


搜索原因得知
SQL-92標準要求對空值的等於(=)或不等於(<>)比較取值爲FALSE。當SET ANSI_NULLS爲ON時,即使 column_name中存在空值,使用WHERE column_name = NULL的SELECT語句仍返回零行;即使column_name中存在非空值,使用WHERE column_name <> NULL的SELECT語句仍返回零行。
當SET ANSI_NULLS爲OFF時,等於(=)和不等於(<>)比較運算符不遵從SQL-92標準。使用WHERE column_name = NULL的SELECT語句返回column_name中含有空值的行。使用WHERE column_name <> NULL的SELECT語句返回列中含有非空值的行。此外,使用WHERE column_name <> XYZ_value的SELECT語句返回所有非XYZ值和非NULL的行。

也可用exists
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章