Olá pessoal,
Hoje falaremos sobre cross aply que é um código do T-SQL para junção(Join).
- Qual é o problema que enfrentamos?
- Onde o cross apply entra?
O maior problema de hoje é quando vamos utilizar subquerys, ex:
SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS JOIN
(SELECT Endereco, Numero FROM tbComplementos WHERE iduser = usuario.iduser) compl
Quando a utilização é parecida com a de cima, retorna erro que a variavel esta fora do escopo ou que a variável não pode ser vinculada, porque o T-SQL usado com inner, right ou left join, não aceita subquery de tabela derivada.
É ai que o CROSS APPLY entra, na troca do CROSS JOIN para CROSS APPLY a sua SQL vai funcionar perfeito.
SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS APPLY
(SELECT Endereco, Numero FROM tbComplementos WHERE iduser = usuario.iduser) compl
Isso vale pra quando você for usar alguma função, ex:
SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS JOIN dbo.fnComplementos(usuario.iduser) compl
aqui vai retornar o mesmo erro citado no primeiro item.
mas ao mudarmos para CROSS APPLY, volta a funcionar.
SELECT usuario.Nome, usuario.Email, compl.Endereco
FROM tbUsuario usuario
CROSS APPLY dbo.fnComplementos(usuario.iduser) compl
Bom pessoal, é isso quem tiver dúvidas pode me mandar e-mail ou comenta ai.
Referência: http://sqlserver-brasil.blogspot.com/2008/08/t-sql-cross-apply.html
Marcelo
Tags: Cross apply, join, SQL Server