Condiciones

09/10/2007 - 15:54 por Penta | Informe spam
Estimados.
Cual es la diferencia de poner las condiciones en los Join o en el
Where ??

Atte
Penta.

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
09/10/2007 - 17:34 | Informe spam
En joins normales no hay diferencia en el resultado obtenido, a menos que
usted necesite un OUTER JOIN

Personalmente prefiero la cláusula JOIN pues, además de manejar
correctamente los OUTER, es más clara de entender (las condiciones de join
están separadas de las condiciones de filtrado).

Ver además:

Choosing SELECT Statements
http://www.sqlmag.com/Article/Artic...44719.html

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Penta" wrote:

Estimados.
Cual es la diferencia de poner las condiciones en los Join o en el
Where ??

Atte
Penta.


Respuesta Responder a este mensaje
#2 Alejandro Mesa
09/10/2007 - 17:46 | Informe spam
Hola Penta,

Depende del tipo de join que estes usando, asi sera el resultado que
obtengas. En el caso de usar "inner join", no hay diferencia entre usarlos en
el uno o en el otro, al no ser que deseas que tu sentencia sea mas legible.
En ese caso se usa las condiciones de union en el "join" ylas de filtro en la
clausula "where".

Por ejemplo, la tabla [order details], de la base de datos northwind, se
relaciona con la tabla [orders] mediante la columna [orderid]. Si deseamos
todas las ordenes y su detalle, de las ordenes puestas en el año 1998,
entonces puedes escribir:

select oh.*, od.*
from dbo.orders as oh inner join dbo.[order details] as od
on oh.orderid = od.orderid and oh.orderdate >= '19980101' and oh.orderdate <
'19990101'

pero para mi, en lo personal, prefiero:

select
oh.*, od.*
from
dbo.orders as oh
inner join
dbo.[order details] as od
on oh.orderid = od.orderid
where
oh.orderdate >= '19980101' and oh.orderdate < '19990101'

Ahora, para el caso de "outer join", el resultado puede cambiar, dependiendo
de donde pongas las condiciones. Si las pones en la clausula "where",
entonces estaras filtrando el resultado final por esa expresion, sin importar
el tipo de join. Si la pones en el join, entonces, en dependencia del tipo de
join (right o left) obtendras todas las filas del lado especificado por el
tipo de join. Fijate en el resultado de estas sentencias:

select
oh.*, od.*
from
dbo.orders as oh
left join
dbo.[order details] as od
on oh.orderid = od.orderid
and oh.orderdate >= '19980101' and oh.orderdate < '19990101'

select
oh.*, od.*
from
dbo.orders as oh
left join
dbo.[order details] as od
on oh.orderid = od.orderid
where
oh.orderdate >= '19980101' and oh.orderdate < '19990101'

La primera sentencia traera todas las ordenes (todas las filas de la tabla
[orders]) sin importar el valor de la columna [orderdate], ya que la
expresion de join dice que se traiga todas las filas del lado izquierdo y las
del lado derecho que cumplan la expresion de union usada.


AMB

"Penta" wrote:

Estimados.
Cual es la diferencia de poner las condiciones en los Join o en el
Where ??

Atte
Penta.


Respuesta Responder a este mensaje
#3 Maxi
09/10/2007 - 18:19 | Informe spam
Hola, un detalle mas a lo dicho, en 2005 ya no puedes en el where emular
left join ni right join o sea *= , =* esto ya no es mas soportado al igual
que *=*


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Penta" escribió en el mensaje
news:
Estimados.
Cual es la diferencia de poner las condiciones en los Join o en el
Where ??

Atte
Penta.

Respuesta Responder a este mensaje
#4 Penta
11/10/2007 - 20:55 | Informe spam
Se agradece enormemente sus datos ha quedado todo muy claro.

Se pasaron.
Penta.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida