Этот запрос представляет собой объединение из 3 запросов:
Первый объединяет записи, которые являются общими в обеих таблицах.
Второй добавляет те, которые существуют только в таблице1.
Третий добавляет записи, которые есть только в таблице 2.
SELECT t1.td, t1.val as val1, t2.val as val2
FROM table1 as t1, table2 as t2
WHERE t1.dt = t2.dt
UNION
SELECT t1.td, t1.val as val1, null as val2
FROM table1 as t1
LEFT JOIN table2 as t2
ON t1.td = t2.td
WHERE t2.td IS NULL
UNION
SELECT t2.td, null as val1, t2.val as val2
FROM table2 as t2
LEFT JOIN table1 as t1
ON t2.td = t1.td
WHERE t1.td IS NULL