Они не более или менее эффективны, они функционально отличаются друг от друга.
При отсутствии фильтра, это соединяет все записи от ведущего к тому соответствию в дочерней компании
select * from t1
left join t2 on t1.a = t2.c
с использованием где и фильтрации на дочерней таблице, это соединение будет эквивалентны внутреннее соединение
select * from t1
left join t2 on t1.a = t2.c
where t2.d=5
с помощью объединения и фильтрации на дочерней таблице, это фильтрует записи дочернего таблицы
select * from t1
left join t2 on t1.a = t2.c and t2.d=5
с использованием где, фильтрация на мастер-таблицы, это фильтрует записи мастер-таблицы
select * from t1
left join t2 on t1.a = t2.c
where t1.b = 3
с использованием соединения, это фильтры записи в мастера, которые могут быть объединены, но все равно возвращает все записи от ведущего ,
select * from t1
left join t2 on t1.a = t2.c and t1.b = 3
Итак, приведенные в нижеследующих таблицах
таблица t1
a b
----------- -----------
1 2
1 3
2 4
3 3
таблица t2
c d
----------- -----------
1 9
4 5
2 5
результаты
Query1
Query2
a b c d
----------- ----------- ----------- -----------
2 4 2 5
query3
a b c d
----------- ----------- ----------- -----------
1 2 NULL NULL
1 3 NULL NULL
2 4 2 5
3 3 NULL NULL
query4
a b c d
----------- ----------- ----------- -----------
1 3 1 9
3 3 NULL NULL
query5
a b c d
----------- ----------- ----------- -----------
1 2 NULL NULL
1 3 1 9
2 4 NULL NULL
3 3 NULL NULL
Условия в том, что статья –
@Dot_NETJunior вы просто ошибаетесь – Alexander
@ Александр смотри на мой ответ, что я имею в виду –