Puoi essere esplicito sui join:
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 pratica, sarei più propenso a usare coalesce()
nella condizione di unione:
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, ''))
Dove ''
sarebbe un valore non in nessuna delle tabelle.
Solo una parola di cautela. Nella maggior parte dei database, l'utilizzo di uno qualsiasi di questi costrutti impedisce l'utilizzo di indici.