Alejandro Mesa

03/02/2006 - 15:20 por Penta | Informe spam
Alejandro :

select
*
from
dbo.customers as c
left join
dbo.orders as oh
on c.customerid = oh.customerid
where
oh.customerid is null


Select * from
dbo.customers as c ,
dbo.orders as oh
Where c.customerid *= oh.customerid
and oh.customerid is null

Porque no da el mismo resultado ?

Siempre pense que *= estaba bien :(
 

Leer las respuestas

#1 Alejandro Mesa
03/02/2006 - 19:29 | Informe spam
Penta,

Cuando individualizas una pregunta, entonces te privas de que otros miembros
del grupo te puedan ayudar.

Si analizas los planes de ejecucion de ambas sentencias, te daras cuenta de
lo pasa. La primera sentencia une las tablas usando un "left join" y despues
filtra el resultado. La segunda, en cambio, hace la union de una forma que
contempla las dos expresiones como parte de la union, o sea, que las columnas
sean iguales y que ademas la columna [customerid] en la tabla [orders] sea
null. como no se cumple la union y ademas esta es "left join" entonces sql
server devuelve las 91 filas que tiene la tabla [customers].


AMB

"Penta" wrote:

Alejandro :

select
*
from
dbo.customers as c
left join
dbo.orders as oh
on c.customerid = oh.customerid
where
oh.customerid is null


Select * from
dbo.customers as c ,
dbo.orders as oh
Where c.customerid *= oh.customerid
and oh.customerid is null

Porque no da el mismo resultado ?

Siempre pense que *= estaba bien :(


Preguntas similares