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
Ilustração 2 – Inclusão de dados
Ilustração 3 – Cross Join
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
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
Já na consulta a cima, o Management Studio identificou o tb1.* como parte da consulta, criando assim o Join e o retorno desejado.