SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)
No SQL Server 2005 e acima, você pode substituir
INNER JOIN
com CROSS APPLY
:SELECT Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM Orders
CROSS APPLY
(
SELECT TOP 1 LineItems.Quantity, LineItems.Description
FROM LineItems
WHERE LineItems.OrderID = Orders.OrderID
) LineItems2
Observe que
TOP 1
sem ORDER BY
não é determinístico:nesta consulta você obterá um item de linha por pedido, mas não está definido qual será. Várias invocações da consulta podem fornecer itens de linha diferentes para o mesmo pedido, mesmo que o subjacente não tenha sido alterado.
Se você quiser uma ordem determinística, você deve adicionar um
ORDER BY
cláusula para a consulta mais interna. Exemplo sqlfiddle