Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Es confiable el Enterprise Manger?

Estas en el tema de Es confiable el Enterprise Manger? en el foro de SQL Server en Foros del Web. Hola, soy nuevo en el Foro y recién postée este mail en la parte de Base de Datos, así que lo transcribo acá: Quería saber ...
  #1 (permalink)  
Antiguo 05/04/2008, 20:35
 
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires
Mensajes: 2
Antigüedad: 16 años
Puntos: 0
Es confiable el Enterprise Manger?

Hola, soy nuevo en el Foro y recién postée este mail en la parte de Base de Datos, así que lo transcribo acá:

Quería saber que opinan sobre la confiabilidad del E.M. El tema es que en el trabajo todos salvo yo prefieren usar el Query Analyzer, porque tienen desconfianza con el código del sql que arma. Me parecía un tanto absurdo hasta que escribí una consulta con un left join entre 2 tablas con un where referenciando campos de la 2ª. Cuando fui a la parte superior eliminó el where y las condiciones las puso en el ON. El resultado era diferente a lo que resultaba del código original, de hecho corriendolo en el Query Analyzer el resultado era bien distinto.
Será este el único caso en que cambia el código por otro incorrecto?

Les agradezco mucho lo que me puedan comentar sobre el tema

Flerc
  #2 (permalink)  
Antiguo 07/04/2008, 14:25
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Re: Es confiable el Enterprise Manger?

Me parece que es completamente confiable.
Lo que te recomiendo es que analices la lógica de tu consulta.

Código:
SELECT {columnas}
FROM    outer_table
LEFT JOIN inner_table
         ON  {campos para vincular ambas tablas} 
         AND {condiciones inner_table}
WHERE {condiciones outer_table}
Si las condiciones aplican a la tabla que está después de la sentencia LEFT JOIN (inner table) es lógico que estén en el ON y no en el WHERE. Las condiciones en el WHERE aplican a la tabla que está antes de la sentencia LEFT JOIN (outer table).
¿Por qué es esto? Porque si pones las condiciones para la "inner table" en el WHERE los resultados pueden cambiar en caso de que existan valores nulos. ¿Cómo podrías diferenciar entre un nulo existente en la tabla de un nulo resultado de la operación LEFT JOIN?

En caso de que la operación sea INNER JOIN, poner la condición de la inner table después de la claúsula ON o de la cláusula WHERE es irrelevante. Pero para LEFT JOIN y RIGHT JOIN pueden devolver resultados incorrectos, como es el caso de tu query original y no del que pone las condiciones en el ON.
  #3 (permalink)  
Antiguo 11/04/2008, 21:21
 
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires
Mensajes: 2
Antigüedad: 16 años
Puntos: 0
Re: Es confiable el Enterprise Manger?

Beakdan, gracias por tu respuesta. Recién ahora puedo contestarte. Es cierto lo que decís sobre un Left Join con condiciones sobre la Inner Table. En realidad daría el mismo resultado que si se lo reemplazara por un Inner Join. Por qué entonces no hace ese reemplazo que resultaría en un query totalmente equivalente y en cambio lo hace por otro que no lo es? Lo perfecto sería que desplegara un mensaje del tipo: 'este query no es razonable, te lo reemplazo por un Inner Join o paso las condiciones del where al On? Pero cambairlo de prepo de ese modo me parece peligroso. No es lógico que el mismo código ejecutado en el Query Analzer (que no lo cambia) de otra cosa. Pero en fin.. si es eso solo, no sería justo decir que no es confiable.

Saludos y Gracias nuevamente

Flerc
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:56.