Diferenças entre Left Join e *=

04/10/2004

0

Boa tarde,

Gostaria de saber a difernça entre o left join e o *=, pois estou encontrando diferença nos resultados de um e de outro. Por exemplo:

create table #teste (codigo int, nome varchar(50), saldo float)
create table teste1 (codigo int, nome varchar(50), saldo float)
insert teste values (1, ´a´, 10)
insert teste values (2, ´b´, 6)
insert teste values (3, ´c´, 7)
insert teste values (4, ´d´, 8)
insert teste1 values (3, ´c´, 5)
insert teste1 values (4, ´d´, 13)

select a.codigo,
case when (a.saldo-b.saldo) is null then 0 else (a.saldo-b.saldo) end
from teste a, teste1 b
where a.saldo-b.saldo 0
and a.codigo *= b.codigo

resultado:
=======

codigo
--------- --------
1 0.0
2 0.0
3 2.0
4 -5.0

(4 row(s) affected)


***************
select a.codigo,
case when (a.saldo-b.saldo) is null then 0 else (a.saldo-b.saldo) end
from #teste a
left outer join teste1 b on a.codigo = b.codigo
where a.saldo-b.saldo 0

resultado:
=======

codigo
--------- --------
3 2.0
4 -5.0

(2 row(s) affected)


Neste exemplo não deveria aparecer todas as 4 linhas da primeira tabela? Onde está meu erro?

Att,
Roberto


Robertolucio

Robertolucio

Responder

Posts

04/10/2004

Robertolucio

Em tempo,

Sei que se eu retirar a cláusula where do exemplo com left join irão aparacer as 4 linhas, mas porque não é necessário retirar a mesma (a.codigo-b.codigo0) do outro exemplo?


Responder

04/10/2004

Marcus.magalhaes

Boa noite Justino.

Vc não cometeu erro nos seus select, o problema é que existe uma falha na linguagem sql quando não se usa o [color=green:96948d649c]padrão ANSI[/color:96948d649c], que é [color=red:96948d649c]LEFT JOIN, RIGHT JOIN ou FULL OUTER JOIN[/color:96948d649c], devido à essa falha, que ocorre tb em outras circunstâncias, a própria MS anunciou que em versões futuras do MS SQL Server, será suportado somente o padrão ANSI. Além disso ele é muito mais claro para se escrever e ler.

Portanto procure utilizar sempre o padrão.

Espero ter ajudado.

Att,


Responder

05/10/2004

Marceloeugenio

Marcus,

Onde você encontrou informações dizendo que existem falhas quando utilizamos ´=´ ao invés de JOIN´s (LEFT, RIGHT e etc.) ?

Há muito tempo estou procurando informações sobre este assunto, do tipo :

Possíveis Falhas;
Versão que não irão comportar o uso de ´=´, ´*=´ e ´=*´;
Documentação da Microsoft com estas informações.

Por favor, caso você saiba onde eu posso encontrar tais informações, me avise por favor !

Muito Obrigado !


Responder

05/10/2004

Marcus.magalhaes

Boa noite Marcelo.

Esta informação está no BOL do SQL Server.

escolha a tab Index e digite : [color=red:3bb4481f0a]joins-SQL Server[/color:3bb4481f0a], depois selecione o item [color=red:3bb4481f0a]operators[/color:3bb4481f0a].

Lá está o que eu estou falando.

Att,


Responder

06/10/2004

Marcus.magalhaes

ah...bom dia.

A propósito, a diferença entre LEFT JOIN e *= esta na forma de processamento.

Quando um select é processado, ele é dividido em vários passos, onde o LEFT JOIN e a clausula ON são processados antes da clausula WHERE, enquanto no *= os dados são filtrados somente no WHERE, obtendo desta forma um resultado diferente em alguns casos. Por isso a MS passou a seguir o padrão ANSI-SQL 92 e somente aceita a forma não padrão (*=) para fins de compatibilidade.

Att,


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar