Galera, hoje vamos falar sobre algumas das junções disponíveis no SQL Server: CROSS APLLY e CROSS JOIN. Esse artigo tem como objetivo tirar as dúvidas em torno desses dois tipos de junções de tabelas.
CROSS APLLY
Antes de entendermos o CROSS APPLY vamos entender o operador APPLY. Esse operador permite que você chame uma função com valor de tabela para cada linha retornada por uma expressão de tabela externa de uma consulta. APPLY é um comando parecido com JOIN porém sem a clausula ON.
O CROSS APPLY só retorna linhas da tabela1 que produzem um conjunto de resultados da função com valor de tabela ou tabela 2.
Sintaxe:
SELECT * FROM
| Tabela1 { CROSS | } APPLY tabela2|função(parâmetro)
Exemplo:
Para exemplificar o CROSS APPLY vamos montar um caso bem simples de cross aplly em funções e selects simples. A seguir criarei uma tabela de Alunos e Cursos no SQL Server e vamos inserir valores nelas. Reparem que existem alunos que ainda não estão cadastrados em nenhum curso, sendo assim os mesmos não serão exibidos nos nossos resultados.

A seguir, será exemplificado o CROSS APPLY sendo similar ao INNER, porém não se faz necessário criarmos a condição ON. Para que seja possível retornar os dados da tabela após o CROSS APPLY se faz necessário criar um alias para a junção.


CROSS JOIN
É um tipo de junção que sem a cláusula WHERE tem como resultado o produto cartesiano entre as tabelas do SELECT. O tamanho do conjunto de resultados do produto cartesiano é o número de linhas na primeira tabela multiplicado pelo número de linhas na segunda tabela. O exemplo a seguir mostra essa junção. Vou utilizar as mesmas tabelas do CROSS APPLY para que fique melhor de visualizarmos o resultado da consulta.
Sintaxe: SELECT * FROM [TABLE 1] CROSS JOIN [TABLE 2]
ou
SELECT * FROM [TABLE 1], [TABLE 2]
Exemplo:

Observem que gerou 50 linhas. Sendo 5 da tabela de curso e 10 da tabela de aluno, ou seja, 5 vezes 10 = 50 linhas retornadas. Se adicionarmos uma cláusula WHERE o sistema se comporta conforme a clausula ON de um INNER JOIN.
Esses dois importantes operadores de junções precisam ser estudados para a certificação 70-461 Querying Microsoft SQL Server 2012/2014. Caso tenham qualquer dúvida, estou à disposição.
Att,
Taiany Coelho
Link permanente
Bom dia,
Bom artigo !
Existe um erro de escrita no trecho :
A seguir, será exemplificado o CROSS APPY sendo similar ao INNER, porém não se faz necessário criarmos a condição ON.
APPY = APPLY
Link permanente
Olá Edvaldo,
Já realizei a correção no trecho.
Agradeço o comentário.
Taiany Coelho