É um JOIN mais rápido que um ONDE?
Suponha que eu tenha duas tabelas que estão ligadas (uma tem uma chave estrangeira para a outra):
CREATE TABLE Document (
Id INT PRIMARY KEY,
Name VARCHAR 255
)
CREATE TABLE DocumentStats (
Id INT PRIMARY KEY,
DocumentId INT, -- this is a foreign key to table Document
NbViews INT
)
Eu sei, esta não é a maneira mais inteligente de fazer as coisas, mas este é o melhor exemplo que eu poderia fazer.
Agora, quero obter todos os documentos com mais de 500 visualizações. As duas soluções que me vêm à mente são:
SELECT *
FROM Document, DocumentStats
WHERE DocumentStats.Id = Document.Id
AND DocumentStats.NbViews > 500
ou:
SELECT *
FROM Document
INNER JOIN DocumentStats
ON Document.Id = DocumentStats.Id
WHERE DocumentStats.NbViews > 500
Ambas as consultas são equivalentes ou existe uma maneira que é muito melhor que a outra? Se sim, porque?
Estou ciente de que meu exemplo não é perfeito, e que as consultas podem precisar de algum ajuste, mas espero que você tenha entendido;)!
EDIT: como solicitado nas respostas, esta questão foi destinada a MSSQL, mas eu estaria interessado em saber se é diferente para outros mecanismos de banco de dados (MySQL, etc ...)