Используйте INNER JOIN, если ваш движок его поддерживает, в основном для ясности условия соединения и разделения фильтров
SELECT Tbl1_Fld1, Tbl2_Fld1
FROM
DB1..TABLE1,DB2..TABLE1
WHERE
DB1..TABLE1 .Tbl1_Fld1 = DB2..TABLE1.Tbl2_Fld1 AND
DB1..TABLE1 .Tbl1_Fld1 = 'foo' AND DB2..TABLE1.Tbl2_Fld1 = 1
против
SELECT Tbl1_Fld1, Tbl2_Fld1
FROM
DB1..TABLE1
INNER JOIN
DB2..TABLE1 ON DB1..TABLE1 .Tbl1_Fld1 = DB2..TABLE1.Tbl2_Fld1
WHERE
DB1..TABLE1 .Tbl1_Fld1 = 'foo' AND DB2..TABLE1.Tbl2_Fld1 = 1
В большинстве двигателей не должно быть различий в исполнении
Однако, и всегда есть «однако», не все объединения являются ВНУТРЕННИМИ.А как насчет ВНЕШНЕГО соединения?Например, *=
и =*
устарели в SQL Server.
Это было в Книгах онлайн в SQL Server 2000. Вот цитата
В более ранних версиях Microsoft® SQL Server ™ 2000, условия левого и правого внешнего соединения были указаны в предложении WHERE с использованием операторов *=
и =*
.В некоторых случаях этот синтаксис приводит к неоднозначному запросу, который можно интерпретировать более чем одним способом.Совместимые с SQL-92 внешние объединения указываются в предложении FROM и не приводят к этой неоднозначности.Поскольку синтаксис SQL-92 является более точным, подробные сведения об использовании старого синтаксиса внешнего объединения Transact-SQL в предложении WHERE не включены в этот выпуск.Синтаксис может не поддерживаться в будущей версии SQL Server.Любые операторы, использующие внешние объединения Transact-SQL, должны быть изменены для использования синтаксиса SQL-92.
Так что если у вас есть более сложный запрос с внутренним и внешним объединениями, это может привести к путаницеВы смешиваете стили.Итак, добавьте консистенцию к ясности , упомянутой выше