我正在使用SQL Server 2008,當我執行一個左外連接到外表沒有任何記錄的表時,我是從我的where子句看到奇怪的行爲。如果我檢查我的外表中的值是否爲'not null',則有時返回true。SQL:檢查'值'不爲空當'值'爲空時返回TRUE
select *
from foo f left join bar b on b.id=f.id
where [email protected] and (f.status = 1 or b.Price is not null)
當我f.status = 0
和b.Price
不存在(或,出現在選擇爲空)這個查詢選擇記錄,其中f.status = 0
和b.Price is null
,即使(FALSE或FALSE)應該是假的。
如果我只是執行此查詢,它會按預期工作,並且任何沒有'bar'中的記錄的任何內容都不會被選中。
select *
from foo f left join bar b on b.id=f.id
where [email protected] and b.Price is not null
有b.Price is not null
爲or
操作的一部分似乎是造成問題的某些原因。這個查詢有什麼問題?我使用SQL Server 2012計算機上的類似數據運行相同的查詢,但沒有看到此問題,它是否與我正在使用的SQL Server版本有關?