Si está hablando de resultados, no habrá muchas diferencias. Si habla de rendimiento, el motor de SQL Server es mucho más inteligente y reescribirá automáticamente su búsqueda en la mayoría de los casos, por lo que no tendrá diferencias en el rendimiento. Dicho esto, prefiero que uses INNER JOIN
cuando una consulta involucra más de una tabla, ya que es la sintaxis válida de ANSI
.
Si alguna vez vas a utilizar OUTER JOIN
, la cuestión de JOIN
vs WHERE
no tiene ningún sentido, ya que la respuesta puede ser diferente en la mayoría de los casos.
Mira un ejemplo:
Suponiendo que tenemos estas dos tablas.
-- JOIN
SELECT s.SalesRep, o.Amount
FROM SalesRep s
INNER JOIN Orders o ON s.id = o.id
GO
-- WHERE
SELECT s.SalesRep, o.Amount
FROM SalesRep s, Orders o
WHERE s.id = o.id
GO
Observará en el conjunto de resultados que ambas consultas devuelven exactamente el mismo resultado. Como mencioné anteriormente cuando utilizamos la cláusula INNER JOIN
y WHERE
, no hay impacto del resultado si la condición JOIN
y la cláusula WHERE
tienen casi la misma condición.
Veamos un ejemplo rápido en el que la combinación externa proporciona resultados absolutamente diferentes en comparación con los casos en los que existe una lógica comercial totalmente diferente cuando se tiene que usar la combinación externa. Como mencioné anteriormente, es como comparar manzanas y naranjas si se compara la unión externa y la cláusula where. No son lo mismo lógicamente.
-- JOIN
SELECT s.SalesRep, o.Amount
FROM SalesRep s
LEFT OUTER JOIN Orders o ON s.id = o.id
GO
-- WHERE
SELECT s.SalesRep, o.Amount
FROM SalesRep s, Orders o
WHERE s.id = o.id
GO
Fuente: What is the Difference Between An INNER JOIN and WHERE Clause