为什么这些查询返回不同的结果?

时间:2019-10-02 10:55:15

标签: sql-server join where-clause

这两个sql服务器查询都应返回相同的计数结果,但返回的结果不同-8219和7876。 左联接应返回左表中的所有行(8219)。 这样的结果(7876)可能是什么原因?

select count(*)
from t1 left join t2 on t1.id=t2.id
where t2.[date]='20191001'
-- returns 7876

select count(*)
from t1 left join t2 on t1.id=t2.id
-- returns 8219 

select count(*)
from t2
where [date]<>'20191001' or [date] is null
-- returns 0

1 个答案:

答案 0 :(得分:0)

您的第一个查询具有LEFT JOIN,但是WHERE子句将其转换为内部联接,因为它过滤掉了所有NULL值。

正确的解决方案是将条件移至ON子句:

select count(*)
from t1 left join
     t2
     on t1.id = t2.id and t2.[date] = '20191001';