2011-11-16 59 views
2

我想知道的區別:SQL Server在Join語句中加入條件?

select * 
from Table1 T1 
left join Table1 T2 on T1.id = T2.id + 1 and (T2.id > 3) 

VS

select * 
from Table1 T1 
left join Table1 T2 on T1.id = T2.id + 1 
where (T2.id > 3) 
+1

@marc_s - 我讀這是一個錯字,並意在T2.id,如果這意味着別的東西,我得打編輯:) – Andrew

+1

@marc_s是啊我修好了。 –

+0

你的答案可能是[here](http://stackoverflow.com/questions/1018822/inner-join-versus-where-clause-any-difference) – misha

回答

4

有一個顯著的差異。

select * from Table1 T1 left join Table1 T2 on T1.id=T2.id+1  where (T2>3 

Where子句將左連接更改爲內連接,因爲它不允許從左連接返回空值。這意味着左連接沒有找到匹配記錄的所有行將被排除,因爲返回的空值與3進行比較並丟棄該行(這與使其成爲內連接的效果相同)

第一個語句中應用濾鏡的加入:

select * from Table1 T1 left join Table1 T2 on T1.id=T2.id+1  and  (T2>3) 

這意味着它將會生效,並且過濾器,可連接至使用左側加入了行,但不會造成當左連接到被丟棄的行無法找到匹配的行。