Cross Apply

O Cross Apply não é novidade do SQL Server 2008, foi introduzido no SQL Server 2005, mas como recebi diversos pedidos de explicações sobre sua funcionalidade resolvi escrever um post.

Porém, para explicar o Cross Apply primeiro vou explicar o que faz o Cross Join para facilitar o entendimento. Este filtro permite obter todos os registros de todas as tabelas fazendo o produto cartesiano. Esse tipo junção permite que o número total de registros seja a multiplicação do total de registros das tabelas envolvidas.

Vamos ao exemplo prático:

 

Criação das tabelas

Criação das tabelas

Ilustração 2 - Inclusão de dados

Ilustração 2 – Inclusão de dados

Ilustração 3 - Cross Join

Ilustração 3 – Cross Join

 

Ilustração 4 - Contando linhas

Ilustração 4 – Contando linhas

E o Cross Apply?

O Cross Apply funciona quando o Cross Join não funciona, ou seja, ele identifica a tabela que esta chamando a subquery, até mesmo permite passar os campos da primeira query como um parâmetro para um UDF.

Vamos supor que no Cross Join seja necessário aplicar um Where na subquery passando o cdtb1 para o campo cdtb2 isso retornaria um erro, já que o Cross Join não reconhece a estrutura acima.

 

Ilustração 5 - Cross Join

Ilustração 5 – Cross Join

Como estou utilizando o Management Studio do SQL Server 2008 ele já identificou que o grupo de objetos tb1.* não pertence a subquery e o retorno desta consulta é um erro.

Ilustração 6 - Cross Apply

Ilustração 6 – Cross Apply

Já na consulta a cima, o Management Studio identificou o tb1.* como parte da consulta, criando assim o Join e o retorno desejado.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s