sql >> Base de Datos >  >> RDS >> Sqlserver

¿Estas dos consultas son iguales:GROUP BY vs. DISTINCT?

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)

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.