union и union_all не работает с обьектами, т.е.
>>>qa = session.query(A.x).filter(A.x<=2)
>>>qa.all()
[(0,), (1,), (2,)]
>>>qb = session.query(B.x).filter(B.x>=0)
>>>qb.all() # prints
[(0,), (1,), (2,)]
>>>qa.union_all(qb).all()
[(0,), (1,), (2,), (0,), (1,), (2,)]
так работает, но если возвращать обьект, а не атрибут, то не работает
>>>qa = session.query(A.).filter(A.x<=2)
>>>qa.all()
[<A object at ....>, <A object at ...>, <A object at ...>]
>>>qb = session.query(B).filter(B.x>=0)
>>>qb.all() # prints
[<B object at ...>, <B object at ...>, <B <object at ...>]
>>>qa.union_all(qb).all()
[<A object at ....>, <A object at ...>, <A object at ...>]
выводит только А обьекты. Использование union вместо union_all нечего не меняет.