过滤器连接或 Where 子句 TSQL

Goo*_*ows 3 t-sql

我应该将过滤器放在 TSQL 查询的什么位置?

SELECT a.colum FROM A 
JOIN B  ON A.ID =  B.ID AND B.STATUS  = 1
Run Code Online (Sandbox Code Playgroud)

或者

SELECT a.colum FROM A 
JOIN B  ON A.ID =  B.ID 
WHERE  B.STATUS  = 1
Run Code Online (Sandbox Code Playgroud)

我正在寻找性能问题或良好做法。

gbn*_*gbn 5

  • 没有性能差异
  • 最佳实践是显式 JOIN 和单独的过滤器(您的第二个示例)

笔记:

这对于 OUTER JOIN 会发生变化,因为您会将其更改为内部联接

快捷方式:

SELECT a.colum
FROM
   A 
   LEFT JOIN 
   B  ON A.ID =  B.ID AND B.STATUS  = 1
WHERE
   a.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

使用单独的过滤器:

SELECT a.colum
FROM
   A 
   LEFT JOIN 
   (SELECT * FROM B WHERE STATUS  = 1) B ON A.ID =  B.ID
WHERE
   a.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)