将条件放入JOIN子句与WHERE子句之间是否存在差异(性能,最佳实践等)?
例如...
-- Condition in JOIN
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND CUS.FirstName = 'John'
-- Condition in WHERE
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE CUS.FirstName = 'John'
Run Code Online (Sandbox Code Playgroud)
您更喜欢哪个(也许是为什么)?
所以我知道在查询的WHERE子句中添加过滤条件是一种很好的编程习惯,这样可以最大限度地减少连接中返回的行数,但是我们如何决定是否应该在WHERE中添加过滤器而不是FROM?例如:
SELECT a.ColA, a.ColB, a.ColC, b.ColD, b.ColE
FROM TblA a INNER JOIN TblB b
On a.ColA = b.ColD
AND a.ColA = 'X'
AND a.ColB = 'Y'
WHERE b.ColD = 'ABC'
Run Code Online (Sandbox Code Playgroud)
在这个查询中,如果我在AND子句而不是WHERE中添加b.ColD怎么办?这会不会使查询更有效率?我知道两种方法的结果有时会有所不同,但我不知道为什么?
谢谢.