The keywords LEFT OUTER JOIN make the difference. The table mentioned on the LEFT side of the keywords act as the OUTER table. This means that all rows from the LEFT table will be returned by the query. Only matching rows from the RIGHT table will be returned.
Demo queries -
create table a (id int, col1 varchar(10));
create table b (id int, col1 varchar(10));
insert into a (id, col1) values
(1, 'a'), (2, 'b'), (3, 'c');
insert into b (id, col1) values
(2, 'b'), (3, 'c'), (4, 'd');
-- all values
select a.*, b.*
from a full outer join b
on a.id = b.id
-- Query 1
-- all values from a
-- only matching from b
select a.*, b.*
from a left outer join b
on a.id = b.id
-- Query 2
-- switching the columns in ON CLAUSE
-- same results as Query 1
-- all values from a
-- only matching from b
select a.*, b.*
from a left outer join b
on b.id = a.id -- switching these. But does not matter.
-- Query 3
-- switching the tables in JOIN CLAUSE
-- different results than Query 1 and 2
-- all values from b
-- only matching from a
select a.*, b.*
from b left outer join a -- switching these. Data changes.
on a.id = b.id -- this does not matter
Results look like these -