The logical processing of a query is on MSDN (written by Microsoft SQL Server team, not 3rd parties)
1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP
A derived table follows this, then the outer query does it again etc etc
This is logical though: not actual. No matter how SQL Server actually does it, these semantics are honoured to the letter. The "actual" is determined by the Query Optimiser (QO) and you avoid the intermediate Cartesion product you mentioned.
It's worth mentioning that SQL is declarative: you say "what" not "how" like you would for a procedural/imperative programming (Java, .net). So saying "this happens before that" is wrong in many cases (eg assumption of short circuits or L-to-R WHERE order)
In your case above, the QO will generate the same plan no matter how it is structured because it is a simple query.
However, the QO is cost based and for a complex query it may take 2 weeks to generate the ideal plan. So it does "good enough" which actually isn't.
So your first case may help the optimiser find a better plan because the logical processing order is different for the 2 queries. But it may not.
I have used this trick on SQL Server 2000 to get 60x speed performance improvement on reporting queries. As the QO improves version to version it gets better at working these things out.
And the book you mentioned: there is some dispute over it
See SO and the subsequent links: https://stackoverflow.com/q/3270338/27535
The order of items in the where clause should not make a difference, especially if you use the preferred join syntax as follows:
select a.col1,
b.col2
from table1 a
join table2 b on b.col1 = a.col1
where a.col3 = 10
This keeps the join conditions separated from the filters.
Best Answer
Yes, the results will be the same. Take a look at this as an example:
The output will have the same exact fields (mind you, if you use
SELECT *
the column order will be different between the queries) with the same exact data.As a reference, here are the two execution plans: