Funkar inte?
Kod:
SELECT
T1.*,
T2.*
FROM Tabell1 T1
JOIN Tabell2 T2 ON convert(char(10), T1.datum, 102) = convert(char(10), T2.datum, 102)
WHERE
...etc...etc
och alltså en join som du gör kommer begränsa resultatet till bara de rader där T1.datum=T2.datum existerar.
left/outer joins är ett måste om du vill ha "null där värde saknas", således måste du låte en tabell styra över den andra.
Om du verkligen inte har någon tabell som styr så får du nog köra en union enligt principen: Välj alla som har matchning UNION alla som bara finns i T1 UNION alla som bara finns i T2.
Kod:
select T1.*, T2.* FROM T1, T2 WHERE convert(char(10), T1.datum, 102) = convert(char(10), T2.datum, 102)
UNION
select T1.*, T2.* FROM T1, T2 WHERE convert(char(10), T1.datum, 102) =* convert(char(10), T2.datum, 102) AND convert(char(10), T2.datum, 102) not in (select convert(char(10), T2.datum, 102) FROM T1, T2 WHERE convert(char(10), T1.datum, 102) = convert(char(10), T2.datum, 102))
UNION
select T1.*, T2.* FROM T1, T2 WHERE convert(char(10), T1.datum, 102) *= convert(char(10), T2.datum, 102) AND convert(char(10), T1.datum, 102) not in (select convert(char(10), T1.datum, 102) FROM T1, T2 WHERE convert(char(10), T1.datum, 102) = convert(char(10), T2.datum, 102))
Något i den stilen borde göra jobbet, men frågan är om det inte är enklare (nu när du saknar "styrtabell") plocka ut resultat för resultat loopa igenom datumen manuellt och skapa den output du vill ha. Ett alternativ till UNION är ju så klart att lägga resultetaten i en temptabell och bygga upp det färdiga resultetatet den vägen, lämpligen i en SP.