Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Essas duas consultas são iguais - GROUP BY vs. DISTINCT?


Seu exemplo nº 2 me fez coçar a cabeça por um tempo - pensei comigo mesmo:"Você não pode DISTINCT uma única coluna, o que isso significaria?" - até eu perceber o que está acontecendo.

Quando voce tem
SELECT DISTINCT(t.ItemNumber)

você não , apesar das aparências, na verdade solicitando valores distintos de t.ItemNumber ! Seu exemplo nº 2 na verdade é analisado da mesma forma que
SELECT DISTINCT
  (t.ItemNumber)
  ,
  (SELECT TOP 1 ItemDescription
   FROM Transactions
   WHERE ItemNumber = t.ItemNumber
   ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t

com parênteses sintaticamente corretos, mas supérfluos em torno de t.ItemNumber . É para o conjunto de resultados como um todo que DISTINCT se aplica.

Nesse caso, como seu GROUP BY grupos pela coluna que realmente varia, você obtém os mesmos resultados. Na verdade, estou um pouco surpreso que o SQL Server não (no GROUP BY exemplo) insistir que a coluna subconsultada seja mencionada no GROUP BY Lista.