Различий в производительности нет.
Однако первый стиль - ANSI-89, и в некоторых магазинах вам сломают ноги.Включая мою.Второй стиль - ANSI-92, он намного понятнее.
Примеры:
Что такое JOIN, а какой фильтр?
FROM T1,T2,T3....
WHERE T1.ID = T2.ID AND
T1.foo = 'bar' AND T2.fish = 42 AND
T1.ID = T3.ID
FROM T1
INNER JOIN T2 ON T1.ID = T2.ID
INNER JOIN T3 ON T1.ID = T3.ID
WHERE
T1.foo = 'bar' AND T2.fish = 42
Если у вас есть OUTER JOINs(=*
, *=
), тогда второй стиль будет работать так, как объявлено.Первый, скорее всего, не будет и также не рекомендуется в SQL Server 2005 +
Стиль ANSI-92 также сложнее для болликса.Со старым стилем вы можете легко получить декартово произведение (перекрестное соединение), если вы пропустите условие.Вы получите синтаксическую ошибку с ANSI-92.
Редактировать: Еще несколько уточнений
- Причиной отказа от использования "join the where" (неявного) являются хитрые результаты с внешними объединениями.
- Если вы используетеявные ВНЕШНИЕ СОЕДИНЕНИЯ + неявные ВНУТРЕННИЕ СОЕДИНЕНИЯ вы все равно получите хитрые результаты + у вас есть несогласованность в использовании
Это не просто синтаксис : речь идет о семантическом правильный запрос
Edit, Dec 2011
SQL Server логический порядок обработки запроса FROM, ON, JOIN, WHERE ...
Так что, если вы смешаете «неявные внутренние объединения» и «явные FROM внешние объединения», вы, скорее всего, не получите ожидаемых результатов, потому что запрос неоднозначный ...