Мой вопрос похож на этот порядок операций SQL, но с небольшим завихрением, поэтому я думаю, что справедливо спросить.
Я использую Teradata. И у меня есть 2 таблицы: table1
, table2
.
table1
имеет только столбец id
. table2
имеет следующие столбцы: id
, val
Возможно, я ошибаюсь, но я думаю, что эти два утверждения дают одинаковые результаты.
Заявление 1.
SELECT table1.id, table2.val
FROM table1
INNER JOIN table2
ON table1.id = table2.id
WHERE table2.val<100
Заявление 2.
SELECT table1.id, table3.val
FROM table1
INNER JOIN (
SELECT *
FROM table2
WHERE val<100
) table3
ON table1.id=table3.id
Мои вопросы: оптимизатор запросов будет достаточно умен, чтобы
- сначала выполнить предложение WHERE, затем JOIN позже в Statement 1
- знать, что таблица 3 фактически не нужна в заявлении 2
Я новичок в SQL, поэтому, пожалуйста, просветите меня, если я что-то не понимаю.