In dem Buch T-SQL-Abfragen in Microsoft SQL Server™ 2005 Der Autor Itzik Ben-Gan erklärt uns die Reihenfolge der logischen Abfrageverarbeitung von SQL Server 2005:
(8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
1. FROM
2. ON
3. OUTER (join)
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY <---------------------- NOTE
11. TOP <---------------------- NOTE
In seinem Buch Einblick in Microsoft SQL Server 2008 : T-SQL-Abfragen sagt er uns die folgende logische Reihenfolge der Abfrageverarbeitung:
(1) FROM
(1-J1) Cartesian Product
(1-J2) ON Filter
(1-J3) Add Outer Rows
(2) WHERE
(3) GROUP BY
(4) HAVING
(5) SELECT
(5-1) Evaluate Expressions
(5-2) DISTINCT
(5-3) TOP <---------------------- NOTE
(6) ORDER BY <---------------------- NOTE
Beachten Sie die Reihenfolge der TOP y ORDER BY in den oberen Auszügen aus diesen Büchern. Sie sind genau entgegengesetzt. Ich denke, dass diese beiden Schritte sehr wichtig sind und bei einer anderen Reihenfolge zu einem völlig anderen Ergebnis führen würden. Ich möchte wissen, ob SQL Server 2008 etwas in seiner Speicher-Engine von SQL Server 2005 geändert hat oder ob es einen anderen Grund dafür gibt.
Danke.