Je kunt expliciet zijn over de joins:
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 de praktijk zou ik eerder coalesce()
. gebruiken in de deelnamevoorwaarde:
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, ''))
Waar ''
zou een waarde zijn die niet in een van de tabellen voorkomt.
Gewoon een woord van waarschuwing. In de meeste databases voorkomt het gebruik van een van deze constructies het gebruik van indexen.