Il tuo esempio n. 2 mi ha fatto grattare la testa per un po' - mi sono detto:"Non puoi DISTINCT
una singola colonna, cosa significherebbe?" - finché non ho capito cosa sta succedendo.
Quando hai
SELECT DISTINCT(t.ItemNumber)
tu non , nonostante le apparenze, in realtà richiede valori distinti di t.ItemNumber
! Il tuo esempio n. 2 viene effettivamente analizzato come
SELECT DISTINCT
(t.ItemNumber)
,
(SELECT TOP 1 ItemDescription
FROM Transactions
WHERE ItemNumber = t.ItemNumber
ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t
con parentesi sintatticamente corrette ma superflue intorno a t.ItemNumber
. È per il set di risultati nel suo insieme che DISTINCT
si applica.
In questo caso, poiché il tuo GROUP BY
gruppi in base alla colonna che effettivamente varia, ottieni gli stessi risultati. In realtà sono leggermente sorpreso che SQL Server non lo faccia (in GROUP BY
esempio) insistere sul fatto che la colonna sottointerrogata sia menzionata in GROUP BY
elenco.