Operador OUTER APPLY
O operador APPLY
têm duas variantes principais o CROSS APPLY
e OUTER APPLY
.
O OUTER APPLY
devolve todas as linhas da tabela A, incluindo aquelas que não têm correspondência, apresentando NULL nas colunas da consulta do operador APPLY que não possuem valores correspondentes.
Este comportamento é idêntico ao LEFT OUTER JOIN
, onde todas as linhas da tabela A são retornadas, independentemente de haver correspondência na tabela B.
Sintaxe básica
FROM <Tabela_A> AS <alias>
OUTER APPLY
<Tabela_B> AS <alias>;
Exemplo
Consultar todos os clientes que realizaram pedidos, todos os clientes que não realizaram nenhum pedido o valor será desconhecido (NULL).
SELECT C.CustomerID, O.SalesOrderID, O.TotalDue
FROM Sales.Customer AS C
OUTER APPLY (
SELECT SalesOrderID, TotalDue
FROM Sales.SalesOrderHeader
WHERE CustomerID = C.CustomerID
) AS O;
CROSS APPLY ou OUTER APPLY
A escolha entre o operador CROSS APPLY
e OUTER APPLY
depende do resultado desejado.
- Se a intenção é obter todas as linhas da tabela referenciada, independentemente de haver correspondência, então
OUTER APPLY
é a escolha adequada. - Se o objetivo é restringir os resultados apenas às linhas que têm correspondência, então
CROSS APPLY
será mais apropriado.