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.

Autor: SQLCrespi

Rodrigo Crespi é MVP Data Platform, MCT, MCSE, MCSA, MCIT, MCDBA e MCP em SQL Server, possuí outras certificações em .NET Framework, Dynamics CRM e etc. Iniciou trabalhando com SQL Server na versão 6.5 na época como desenvolvedor, logo direcionou a sua carreira para a área de administração de bancos de dados. Atualmente é Sócio da CrespiDB – Soluções em Plataformas de Dados, além de professor universitário na Uniftec – Caxias do Sul Autor de diversos artigos publicados em sites e revistas sobre SQL Server e engenharia de software, mantem o canal SQLCrespi no Youtube, o blog SQLCrespi, além de ser dedicado ao SQL Server RS PASS Chapter Leader do grupo de profissionais em SQL Server do Rio Grande do Sul.

Deixe um comentário

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