HiveBrain v1.2.0
Get Started
← Back to all entries
patternMinor

Filters Joins or Where clauses TSQL

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
tsqlwherefiltersjoinsclauses

Problem

Where should I put the filters on a TSQL query?

SELECT a.colum FROM A 
JOIN B  ON A.ID =  B.ID AND B.STATUS  = 1


OR

SELECT a.colum FROM A 
JOIN B  ON A.ID =  B.ID 
WHERE  B.STATUS  = 1


I'm looking for performance issues or good practices.

Solution


  • There is no performance difference



  • Best practice is explicit JOIN and separate filters (your 2nd example)



Note:

This changes for OUTER JOINs because you'd change it to a inner join

The quick way:

SELECT a.colum
FROM
   A 
   LEFT JOIN 
   B  ON A.ID =  B.ID AND B.STATUS  = 1
WHERE
   a.foo = 'bar'


With separate filters:

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

Code Snippets

SELECT a.colum
FROM
   A 
   LEFT JOIN 
   B  ON A.ID =  B.ID AND B.STATUS  = 1
WHERE
   a.foo = 'bar'
SELECT a.colum
FROM
   A 
   LEFT JOIN 
   (SELECT * FROM B WHERE STATUS  = 1) B ON A.ID =  B.ID
WHERE
   a.foo = 'bar'

Context

StackExchange Database Administrators Q#3683, answer score: 5

Revisions (0)

No revisions yet.