When joining to a subset of a table, any reason to prefer one of these formats over the other?
Subquery version:
SELECT ...
FROM Customers AS c
INNER JOIN (SELECT * FROM Classification WHERE CustomerType = 'Standard') AS cf
ON c.TypeCode = cf.Code
INNER JOIN SalesReps s ON cf.SalesRepID = s.SalesRepID
vs the WHERE clause at the end:
SELECT ...
FROM Customers AS c
INNER JOIN Classification AS cf ON c.TypeCode = cf.Code
INNER JOIN SalesReps AS s ON cf.SalesRepID = s.SalesRepID
WHERE cf.CustomerType = 'Standard'
The WHERE clause at the end feels more “traditional”, but the first is arguably more clear, especially as the joins get increasingly complex.
Only other reason I can think of to prefer the second is that the “SELECT *” on the first might be returning columns that aren’t used later (In this case, I’d probably only need to return cf.Code and Cf.SalesRepID)
What about a third option?
Personally, I prefer to use
JOINsyntax to indicate the statements on which the overall set is defined, the foreign keys or other conditions that indicate two rows should be joined to make a row in the result set.The
WHEREclause contains the criteria which filter my result set. Arguably, this can become quite bloaty and complicated when you are performing a number of joins, however when you think in sets it follows a kind of logic:SELECTwhat columns I want.JOINtables to define the set I want to get rows from.WHEREmy criteria are not met.By this logic, I’d always choose your second syntax for consistent readability.