They're not more or less effective, they're functionally different.
With no filter, this joins all the records from the master to those matching in the subsidiary
select * from t1
left join t2 on t1.a = t2.c
using the where, and filtering on the subsidiary table, this join will be equivalent to an inner join
select * from t1
left join t2 on t1.a = t2.c
where t2.d=5
using the join, and filtering on the subsidiary table, this filters the subsidiary table's records
select * from t1
left join t2 on t1.a = t2.c and t2.d=5
using the where, filtering on the master table, this filters the master table records
select * from t1
left join t2 on t1.a = t2.c
where t1.b = 3
using the join, this filters the records in the master that can be joined to, but still returns all records from the master.
select * from t1
left join t2 on t1.a = t2.c and t1.b = 3
So given the following tables
table t1
a b
----------- -----------
1 2
1 3
2 4
3 3
table t2
c d
----------- -----------
1 9
4 5
2 5
the results are
query1
a b c d
----------- ----------- ----------- -----------
1 2 1 9
1 3 1 9
2 4 2 5
3 3 NULL NULL
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