class B(Base):
    __tablename__ = 'b'
id = Column(Integer, primary_key=True)
a_id = Column(Integer, ForeignKey('a.id'))
e = create_engine('sqlite://', echo=True)
Base.metadata.create_all(e)
s = Session(e)
s.add_all([A(bs=[B(), B()]), A(bs=[B()])])
s.commit()
subq = s.query(A, B).join(A.bs).with_labels().subquery()
print(s.query(A, B).select_from(subq).all())
a_alias = aliased(A, subq)
b_alias = aliased(B, subq)
print(s.query(a_alias, b_alias).all())
SQLAlchemy ORM выбирает несколько объектов из подзапроса