Z vašeho příkladu č. 2 jsem se chvíli drbal na hlavě – v duchu jsem si říkal:„Nemůžeš DISTINCT jeden sloupec, co by to znamenalo?" - dokud jsem si neuvědomil, co se děje.
Když máte
SELECT DISTINCT(t.ItemNumber)
nejste , navzdory zdání ve skutečnosti požaduje odlišné hodnoty z t.ItemNumber ! Váš příklad č. 2 je ve skutečnosti analyzován stejně jako
SELECT DISTINCT
(t.ItemNumber)
,
(SELECT TOP 1 ItemDescription
FROM Transactions
WHERE ItemNumber = t.ItemNumber
ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t
se syntakticky správnými, ale nadbytečnými závorkami kolem t.ItemNumber . DISTINCT je pro výslednou sadu jako celek platí.
V tomto případě, protože vaše GROUP BY skupiny podle sloupce, který se ve skutečnosti liší, získáte stejné výsledky. Vlastně mě trochu překvapuje, že to SQL Server nedělá (v GROUP BY příklad) trvejte na tom, aby byl poddotazovaný sloupec uveden v GROUP BY seznam.