nochmal zum verständnis: wir reden hier nur von joins und on bedingung.
wenn in anderen datenspalten etwas enthalten ist, hat das hierauf keinen einfluß.
auch die where bedingung hat hiermit nichts zu tun. diese dient nur zur auswahl der relevanten zeilen.
ein join wird immer mit der on bedingung verknüpft. der unterschied zwischen left/right join und inner join liegt nur in der schnittmenge. ein join erweitert üblicherweise die spaltenanzahl der ergebnismenge, welche sonst nur aus einer der tabellen geliefert werden kann. deshalb wird mit dem join eine virtuelle breitere tabelle erstellt, aus der dann die ergebnismenge geliefert wird.
um hier die virtuelle länge der tabelle zu bestimmen, ist die art des joins zu benennen. ein inner join liefert immer die kleinste anzahl von zeilen. der left/right join liefert immer alle zeilen der left oder right tabelle, wobei die spalten der anderen tabellen bei nichtzutreffender on bedingung mit NULL gefüllt werden. (also kein korrespondierender satz in der anderen tabelle enthalten ist).
gemäß der where bedingung werden nun die sätze aus virtuellen tabelle als ergebnismenge geliefert.
wenn man nun bewußt auf NULL bedingungen abfragt, liefert die ergebnismenge selbstverständlich auch NULL ergebnisse.