Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/06/2011, 08:08
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con CONCAT

Con JOIN te arriesgas a un producto cartesiano, porque intenta igualar las columnas que tengan el mismo nombre, y si no representan el mismo dato exactamente, el resultado de poner sólo JOIN puede dar respuestas erróneas.
El INNER JOIN, por su lado exige que pongas lso campos que se relacionan y sólo relaciona esos. Es más preciso.
Por otro lado, ten en cuenta que toda subconsulta en el FROM genera una tabla derivada que debe llvar su nombre. hasta allí ibas bien, pero luego querías invocar una de las tablas internas de la subconsulta por su nombre, y eso no se puede hacer, porque para la consulta exterior ya no existe (está encapsulada en la subconsulta). Para acceder a los datos tienes que estar leyendolos en la subconsulta, y sólo puedes usar como nombre de tabla el de la derivada. cualquier otra cosa puede dar errores de iterpretación.
Finalmente: El INNER JOIN ... ON... es más eficiente que poner la relación en el WHERE porque el WHERE se aplica una vez leído todo (incluyendo lo que se descartará), mientras que el INNER JOIN descarta lo que no cumple la relación a medida que va leyendo registros.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)