Tu ejemplo n.° 2 me hizo rascarme la cabeza por un tiempo. Pensé para mis adentros:"No puedes DISTINCT
una sola columna, ¿qué significaría eso?", hasta que me di cuenta de lo que estaba pasando.
Cuando tienes
SELECT DISTINCT(t.ItemNumber)
tú no , a pesar de las apariencias, en realidad solicita valores distintos de t.ItemNumber
! Su ejemplo n. ° 2 en realidad se analiza de la misma manera que
SELECT DISTINCT
(t.ItemNumber)
,
(SELECT TOP 1 ItemDescription
FROM Transactions
WHERE ItemNumber = t.ItemNumber
ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t
con paréntesis sintácticamente correctos pero superfluos alrededor de t.ItemNumber
. Es para el conjunto de resultados como un todo que DISTINCT
aplica.
En este caso, dado que su GROUP BY
grupos por la columna que realmente varía, se obtienen los mismos resultados. De hecho, estoy un poco sorprendido de que SQL Server no lo haga (en el GROUP BY
ejemplo) insista en que la columna subconsultada se mencione en el GROUP BY
lista.