Tema: Inner Join
Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/10/2013, 12: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: 14 años, 6 meses
Puntos: 2658
Respuesta: Inner Join

Entendamos un par de conceptos sobre el JOIN:
1) Cuando se trata de JOIN implícitos, MySQL automáticamente realiza un matching entre campos de ambas tablas que tengan el mismo nombre. Esto puede hacer que el join se realice entre campos que teniendo igual nombre, tengan datos diferentes.
Esto obviamente no es lo esperable y los resultado erroneos pueden ser muchos.
2) Un INNER JOIN implica que MySQL devuelva aquellos registros que efectivamente cumplan con lo que se indica en cada uno de los ON. Es decir, si al menos uno de los tres INNER JOIN no se cumple, ese registro no será devuelto bajo ninguna circunstancia.
En tu caso eso significa que todo empleado debe estar relacionado con un área, que cada empleado debe tener un puesto, y que cada empelado debe tener un nivel de acceso declarado.
Cualquiera de los datos que sea opcional, donde el empleado no esté relacionado, y ese empleado no existirá en la tabla devuelta.

Todo esto se puede validar sin problemas, por ejemplo:
Código MySQL:
Ver original
  1. SELECT IdEmp
  2. FROM empleado E LEFT JOIN area A ON A.IdArea = E.IdArea
  3. WHERE A.IdArea IS NULL;
  4.  
  5. SELECT IdEmp
  6. FROM empleado E LEFT JOIN JOIN niveldeacceso N ON E.IdNivel = N.IdNivel
  7. WHERE N.IdNivel IS NULL;
  8.  
  9. SELECT IdEmp
  10. FROM empleado E LEFT JOIN puesto P ON E.IdPuesto = P.IdPuesto
  11. WHERE P.IdPuesto  IS NULL;
Si alguna de estas devuelve datos, ese registro no saldrá en tu consulta principal.

No hay otra alternativa.

Por cierto, el uso de JOIN implícito tal como lo planteaste puede generar un producto cartesiano entre registros no relacionados. Ese es uno de los peores escenarios de consulta, porque es pura basura.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)