Without sample data it would be hard to say what is going on with the union but it is possible that what appear to be duplicates are actually unique in some way not visible.
In any case your second query is, in my eyes a lot more readable and, almost certainly more efficient than the union.