chu*_*lor 3 sql sql-server left-join sql-server-2008
我有两个问题,我认为这意味着同样的事情,但我不断得到不同的结果,我希望有人可以解释这些是如何不同的:
1.
select *
from table1 a
left join table2 b on a.Id = b.Id and a.val = 0
where b.Id is null
Run Code Online (Sandbox Code Playgroud)
2.
select *
from table1 a
left join table2 b on a.Id = b.Id
where b.Id is null
and a.val = 0
Run Code Online (Sandbox Code Playgroud)
查询的要点是查找table1中的行和val = 0中不在table2中的行.
我也在使用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
Run Code Online (Sandbox Code Playgroud)
而事实并非如此.
select o.*
from sys.objects o
left join sys.objects o2 on o.object_id=o2.object_id
where 1=0
Run Code Online (Sandbox Code Playgroud)