Sie können explizit über die Joins sprechen:
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4
FROM Table1 INNER JOIN
Table2
ON (Table1.Col1 = Table2.Col1 or Table1.Col1 is NULL and Table2.Col1 is NULL) AND
(Table1.Col2 = Table2.Col2 or Table1.Col2 is NULL and Table2.Col2 is NULL)
In der Praxis würde ich eher coalesce()
verwenden in der Join-Bedingung:
SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4
FROM Table1 INNER JOIN
Table2
ON (coalesce(Table1.Col1, '') = coalesce(Table2.Col1, '')) AND
(coalesce(Table1.Col2, '') = coalesce(Table2.Col2, ''))
Wobei ''
wäre ein Wert, der in keiner der Tabellen enthalten ist.
Nur ein Wort der Vorsicht. In den meisten Datenbanken verhindert die Verwendung eines dieser Konstrukte die Verwendung von Indizes.