Hola compañer@s:
Temo no estar completamente de acuerdo con jimylu cuando dice:
Cita: esta bien esa formula pero tambien podrian emplear otra forma mas rapida con el mismo resultado por ejm
select * from tabla1 t1, tabla2 t2 where t1.id=t2.id and "otra consulta"
Hasta donde recuerdo, las operaciones con JOIN (INNER, LEFT, O RIGTH) son más rápidas que hacer las uniones explicitas en el where. Por experiencia propia he comprobado que así es... aunque existe un fuerte debate sobre cual de las dos maneras es más rápida. Sin embargo, siempre he pensado que utilizando INNER JOINS en lugar de WHERE, las consultas quedan más "limpias" o legibles, sobre todo cuando intervienen muchas tablas o condiciones, sobre todo por el hecho de que no mezclas condiciones de unión con condiciones de filtrado y como ejemplo dos consultas:
Código MySQL:
Ver originalSELECT tabla1.campo
, tabla2.campo
, tabla3.campo
, tabla5.campo
, tabla.campo
FROM tabla1 T1
, tabla2 T2
, tabla3 T3
, tabla4 T4
, tabla5 T5
T3.fecha
> '2011-10-20' andT4.campo4
in (1, 4, 5) and
SELECT tabla1.campo
, tabla2.campo
, tabla3.campo
, tabla5.campo
, tabla.campo
tabla1.campo2
= 'algo' and tabla3.fecha
> '2011-10-20' andtabla4.campo4
in (1, 4, 5) andtabla3.campo
= tabla5.campo
and
Ambas consultas pretenden ser lo mismo, pero en la segunda se distinguen perfectamente las condiciones de unión (ON) con las condiciones de filtrado (WHERE) mientras que en la primera las condiciones están mezcladas... Además, otra ventaja sería que puedes observar perfectamente si te hace falta definir alguna relación entre tus tablas y así evitar productos cartesianos, pues en la primer consulta observen que
la tabla4 no se une con ninguna tabla ¿lo notaron a primer vista?
Finalmente, a diferencia de otros DBMS, MySQL no permite hacer LEFT JOINS O RIGHT JOINS implicitos, como lo hace SQL Server y ORACLE
Código:
SQL Server
FROM tabla1, tabla2 WHERE tabla1.campo *= Tabla2.campo
ORACLE
FROM tabla1, tabla2 WHERE (+)tabla1.campo = Tabla2.campo
Por lo que si tuvieras necesidad de mezclar este tipo de JOIN's no podrías hacer utilizando WHERE
Finalmente, la decisión de usar uno u otro depende de la persona que hace la consulta.
Saludos
Leo.