Im Folgenden habe ich zwei Varianten einer sich ziemlich ändelnden SQL Abfrage:

SELECT Top 1 Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmount
FROM Employees INNER JOIN
(Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID)
ON Employees.EmployeeID = Orders.EmployeeID

and "Order Subtotals".Subtotal > 2490.50

WHERE Employees.EmployeeID > 1

SELECT Top 1 Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmount
FROM Employees INNER JOIN
(Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID)
ON Employees.EmployeeID = Orders.EmployeeID
WHERE Employees.EmployeeID > 1
and "Order Subtotals".Subtotal > 2490.50

Einmal ist die Subtotal Abfrage im FROM/JOIN Bereich und einmal im WHERE. In diesem Fall liefert der SQL Server tatsächlich das gleiche Ergebnis. Nun ist mir aber bei einem Kunden folgendes passiert: In einer Kundentabelle, werden die Kundendatensätze auch noch versioniert. Es musste auf eine bestimmte Version eines Satzes zugegriffen werden und dazu wurde leider weder ein ORDER BY DESC oder ein zielgerichtetes Abfragen auf die richtige Version des Datensatzes zurückgegriffen, sondern – einfach mit TOP 1 gearbeitet. Im FROM/JOIN Bereich hatte die Abfrage alle Versionen geliefert und daher bei TOP 1 immer die älteste Version. Durch Kopieren in den WHERE Bereich war das Problem dann gelöst. Ich werde versuchen auf Basis der Northwind Datenbank dieses Phenomen nachvollziehbarer zu machen. Aber es war mir jetzt schon wichtig genug das niederzuschreiben.