Not sure why you think Scenario 2 is βlogicalβ more efficient . On an INNER JOIN everything is basically a filter, so SQL Server can reduce the logic to the same basic plan form. Here is an example from AdventureWorks2012 ( click to enlarge ):

I prefer to separate the connection criteria from the filter criteria, so I will always write the query in the format on the left. However, @HLGEM makes a good point, these sentences are interchangeable in this case only because it is a INNER JOIN . For OUTER JOIN it is very important to put filters in an external table in the join criteria, otherwise you unwittingly end with an INNER JOIN and radically change the semantics of the query. Therefore, my advice on how the plan can be curtailed is valid only for internal associations.
If you're worried about performance, I'll start by getting rid of SELECT * and pulling out the columns you need (and make sure there is a coverage index).
Four months later, another answer appeared, stating that there would usually be a difference in performance and that the filter criteria in the ON clause would be better. Although I will not argue that it is certainly believable that this can happen, I argue that this, of course, is not the norm and should not be something that you use as an excuse to always put all the filter criteria in sentence ON .
Aaron bertrand
source share