Hier gibt es direkt zwei Probleme:
Distinct filtert doppelte.
Union filtert doppelte.
Es können also keine Doppelten übrigbleiben.
Ohne das fehlerverursachende
SQL, nur anhand des Beispielfragmentes, kann man keinerlei Aussage zu möglichen Fehlerquellen treffen.
Werden Sätze doppelt angezeigt, so gibt es bestimmt (unsichtbare) Unterschiede, wie z. B. folgende Leerzeichen bei Zeichenfolgen, Abweichungen bei den Nachkommastellen (ausserhalb des dargestellten Bereiches, z. B. ab der dritten von zwei dargestellten Nachkommastellen), ...