epic

Pro
Se incorporó
11 Febrero 2007
Mensajes
846
Hola a todos... alguien me podría aclarar cual es la diferencia entre usar esta consulta con el WHERE o con el INNER JOIN ?? ambos resultados me da lo mismo.

SELECT producto.*, fabricante.nombre FROM producto, fabricante WHERE producto.codigo_fabricante=fabricante.codigo AND producto.precio>200 and fabricante.nombre="Crucial"

SELECT producto.*, fabricante.nombre FROM producto INNER JOIN fabricante ON producto.codigo_fabricante=fabricante.codigo WHERE producto.precio>200 and fabricante.nombre="Crucial"
 

vic r

Capo
Se incorporó
2 Octubre 2007
Mensajes
280
En términos prácticos es lo mismo, internamente el motor de base de datos hará el mismo proceso para obtener los datos (puedes verificarlo con un "EXPLAIN"). Dicho esto, aclaro que la implementación específica varía de DB en DB pero en general son similares.

Personalmente prefiero usa la sintaxis con "INNER JOIN" porque es más explicita.
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.604
Agrego que además encuentro más fácil el aplicar left, inner o right join para saber cuándo filtrar por posibles null dando vueltas.

Y bueno, tal como dijeron, aplica un EXPLAIN para saber qué va a hacer el motor con tu consulta.

Saludos.
 
Upvote 0

epic

Pro
Se incorporó
11 Febrero 2007
Mensajes
846
Entiendo entonces que en este caso es "prácticamente" lo mismo, ¿y si fuesen mas tablas por las que se deberian rescatar datos? por ejemplo 4 o 6 , también daría lo mismo?

¿cuando conviene usar una sentencio o la otra?
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.872
Joe pino lo mismo que el vikingo: visualmente me es más fácil leer y entender una sentencia cuando está armada con LEFT, INNET, RIGHT, OUTER .

En estricto rigor son lo mismo, funcionan igual pero creo que en alguna parte leí que LO CORRECTO es usar LEFT, INNER y toda esa huea.


Efectivamente puedes usar inner joins con la mansa cachá de tablas, por ejemplo

Código:
SELECT producto.*, fabricante.nombre, proveedor, nombre_proveedor
FROM producto
INNER JOIN fabricante ON producto.codigo_fabricante=fabricante.codigo
INNER JOIN proveedor ON proveedor.codigo_producto = producto.codigo_producto
WHERE producto.precio>200 and fabricante.nombre="Crucial"
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.604
En estricto rigor son lo mismo, funcionan igual pero creo que en alguna parte leí que LO CORRECTO es usar LEFT, INNER y toda esa huea.
Técnicamente: le haces la vida más fácil al optimizador / pre-compilador pq desde muy temprano es clara la intención y así el motor tiene la libertad de poder decidir cuál es el mejor camino de acuerdo a los índices existentes y demás campos que defines, tanto para búsqueda como de limitaciones que impones con el WHERE.

El OP no dice qué motor ocupa ni cómo están compuestas las tablas, pero tb hay influencia con FOREIGN KEYS y otros índices.

Cuento corto: si tu intención es unir tablas en una consulta, hazle saber tu intención de forma clara al motor. Él podrá elegir la mejor ruta para esa consulta.

Saludos.

disclaimer: sé que no ocupé los términos técnicos correctos, pero quise simplificarlo un poco sin tener que escribir un libro jajajaj
 
Upvote 0
Subir