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 APPLYserá mais apropriado.