Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/03/2016, 15:34
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, 2 meses
Puntos: 2658
Respuesta: usar inner join en mysql

Mucha, y las hemos explicado numerosas veces en el foro de MySQL, así como puedes encontrarla en los manuales de referencia:
- Por empezar un JOIN implícito (la coma) intenta unir los campos del mismo nombre, lo que puede dar resultados erróneos si los campos se llaman igual pero pertenecen a diferentes dominios.
- Si no hay campos de igual nombre, el resultado es un producto cartesiano, que es la pero forma de consulta posible. Ese producto cartesiano se ejecuta antes de aplicar el WHERE, por lo que el impacto en la performance puede ser catastrófico.
- El WHERE no es optimizable por el parser en MySQL, a diferencia de otros DBMS. Esto puede traer muchos problemas en la las consultas con tablas de grandes cantidades de registros.
- A diferencia del JOIN implícito, el INNER JOIN es optimizable por el parser, eligiendo la mejor forma de consulta.
- La selección de registros en el INNER JOIN no lee todos los registros que existen, sino los que cumplen con el ON a medida que se van leyendo, descartando sin cargar el restro.
- Si se usan condiciones en el ON sobre claves foráneas, eso mejora dado que se accede directamente al indice creado al generar una FK. Esto no sucede en el WHERE.
- Si los datos que se piden en el SELECT son solo los del indice, entonces ni siquiera se lee la tabla, sino que se toman del indice, con un mejor tiempo.

Todo esto es solo una parte de las razones, pero creo que te alcanzará.

Volviendo a tu problema, es altamente probable que al menos en UNA de las tablas no haya registros que cumplan las relaciones indicadas.

¿Lo verificaste?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)