Array
(
)

Diferenças entre Left Join e *=

Robertolucio
   - 04 out 2004

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:

Robertolucio
   - 04 out 2004

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?

Marcus.magalhaes
   - 04 out 2004

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 padrão ANSI, que é LEFT JOIN, RIGHT JOIN ou FULL OUTER JOIN, 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,

Marceloeugenio
   - 05 out 2004

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 !

Marcus.magalhaes
   - 05 out 2004

Boa noite Marcelo.

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

escolha a tab Index e digite : joins-SQL Server, depois selecione o item operators.

Lá está o que eu estou falando.

Att,

Marcus.magalhaes
   - 06 out 2004

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,