Ku pamięci:
Pobranie danych z tabel A i B gdzie A zawiera referencję do B:
select * from a,b where a.ref=b.id;
Gdy możliwe jest, że nie każde A ma odpowiednik w B to:
select * from a left join b on a.ref=b.id;
i brakujące dane w B zostaną zastąpione przez NULL
Podczas gdy:
select * from a,b,c where a.refb=b.id and a.refc=c.id
może działać to już dobranie się do brakujących rzędów z left join wygląda inaczej:
select * from a left join b on a.refb=b.id left join c on a.refc=c.id
każdy inny sposób jaki mi przyszedł do głowy dawał iloczyn kartezjański tablic, co w moim przypadku było (zaledwie) milionami rzędów.