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.

Author: 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 uma resposta