El objetivo de la pregunta es tener una respuesta con fundamento a la cual poder hacer referencia para que el OP pueda tener una idea clara sobre la conveniencia de usar JOIN
o WHERE
a la hora de unir una o más tablas en una consulta.
Dada una estructura de tablas parecida a esta o similar (usaré sólo dos tablas por motivos de simplicidad, pero imaginemos que haya varias tablas implicadas en una posible juntura...):
MySQL 5.6 Schema Setup:
CREATE TABLE personas
(`id_persona` int, `nombre` varchar(150), `id_ciudad` int)
;
INSERT INTO personas
(`id_persona`, `nombre`, `id_ciudad`)
VALUES
(1, 'Pedro', 1),
(2, 'Santiago', 2),
(3, 'Juan', 3),
(4, 'Andrés', 1)
;
CREATE TABLE ciudades
(`id_ciudad` int, `ciudad` varchar(150), `id_provincia` int)
;
INSERT INTO ciudades
(`id_ciudad`, `ciudad`, `id_provincia`)
VALUES
(1, 'Galilea', 1),
(2, 'Betsaida', 2),
(3, 'Patmos', 3)
;
Query 1:
SELECT p.nombre, c.ciudad
FROM personas p
INNER JOIN ciudades c ON p.id_ciudad=c.id_ciudad
| nombre | ciudad |
|----------|----------|
| Pedro | Galilea |
| Santiago | Betsaida |
| Juan | Patmos |
| Andrés | Galilea |
Query 2:
SELECT p.nombre, c.ciudad
FROM personas p, ciudades c
WHERE p.id_ciudad=c.id_ciudad
| nombre | ciudad |
|----------|----------|
| Pedro | Galilea |
| Santiago | Betsaida |
| Juan | Patmos |
| Andrés | Galilea |
En la Query 1 he usado JOIN
para juntar las tablas, mientras que en la Query 2 he usado WHERE
. Como se puede ver, el resultado es exactamente el mismo.
Sin embargo, he leído que el uso de WHERE
es menos eficaz que el uso de JOIN
y que incluso el uso de WHERE
es deprecated en algunas versiones recientes de bases de datos. ¿Es esto cierto? ¿Por qué motivos sería mejor usar JOIN
en vez de WHERE
.
Nota: A los posibles cerradores de preguntas
Planteo esta pregunta porque he respondido a varias dudas en las que el código usado para unir tablas es WHERE
... yo tengo asumido que JOIN
es mejor, pero nunca me he detenido a investigar el por qué. La respuesta me ayudará a confirmar si estoy o no equivocado y puede servir como referencia a quienes continúan usando el menos eficaz de los dos métodos. O... puede que sea sólo un mito y dé exactamente igual usar JOIN
o usar WHERE
.
Espero tener una respuesta interesante, sin tener que desprenderme mediante recompensa :) , aunque esa opción nunca se descarta.