Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/01/2009, 14:37
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: 16 años, 5 meses
Puntos: 2658
Respuesta: leer registros

El problema, tal y como lo estás planteando en el primer post, es que lo que intentas hacer no tiene sentido con respecto al JOIN en cualquiera de sus formas.
Empecemos desde el principio en una forma sintética:

Cita:
1. El JOIN realiza el cruce de una tabla T1 con otra tabla T2 en función de ciertos comportamientos que dependen de los valores de cada tabla.

2. Un JOIN simple sin discriminación cruza cada registro de una tabla con cada registro de la otra devolviendo una tabla que es el resultado de combinar cada registro de T! con cada uno de T2, sin importar si los valores coinciden o no.

3. El INNER JOIN realiza la junta de cada registro de una con cada registro de la otra en función de un campo determinado, el cual puede tener el mismo nombre en ambas tablas o tener diferentes nombres en cada tabla. En cualquier caso solamente devolverá aquellos en los que el campo coincida en su valor.

4. LEFT JOIN o RIGHT JOIN funcionan de la misma forma: Uno devuelve los registros de la tabla IZQUIERDA que coincidan con el cruce, la otra los de la DERECHA. Pero en cualquier caso debe existir una cláusula ON con los campos que se comparan.

5. En cualquier caso, si la consulta entre T1 y T2 no produce resultados en la clausula ON o los campos no contienen ningún valor ni tipo de columna idénticos, MySQL devolverá NULL.

6. En una consulta donde existan valores idénticos en algunos registros relacionados, devolverá esos registros, no devolviendo ningún otro.
Sabiendo esto, al menos, entonces podemos deducir que si tenemos 3 tablas T1, T2 y T3, la consulta dará resultado si y sólo si toda la vinculación devuelve en cada caso un valor no nulo. Esto es, si la tabla T1 cruzada con la tabla T2 devuelve algún resultado, entonces habrá datos sobre los que hacer la cruza con la tabla T3. Si no devuelve datos entre T1 y T2, sería lo mismo que estár haciendo un JOIN entre T3 y NULL... lo que por definición es NULL.

¿Se comprende la idea?

En esencia, lo que sucede es que los JOIN funcionan en forma lógica como un AND de lógica proposicional: Solamente es verdadero cuando ambos son verdaderos...

Nunca olvidar que a nivel algebraico, NULL es un valor de anulación o elemento nulo. Todo elemento sumado, encadenado, multiplicado,dividido o vinculado a un campo NULL es NULL.
Y una consulta que da NULL es una consulta que no devuelve ninguna tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)