我有两个我以为是同一意思的查询,但是我一直得到不同的结果,我希望有人可以解释这些差异如何:
1。
select * from table1 a left join table2 b on a.Id = b.Id and a.val = 0 where b.Id is null
2。
select * from table1 a left join table2 b on a.Id = b.Id where b.Id is null and a.val = 0
查询的重点是查找表1中的行和val = 0而不是表2中的行。
我也使用sql server 2008,但是我怀疑这是否重要。
在考虑左联接时,应将它们视为具有3个概念阶段。
然后,您将看到为什么得到不同结果的原因。
这也解释了为什么返回结果
select o.* from sys.objects o left join sys.objects o2 on o.object_id=o2.object_id and 1=0
而事实并非如此。
select o.* from sys.objects o left join sys.objects o2 on o.object_id=o2.object_id where 1=0