Drugi argument Query.join() w tym przypadku powinno być pełne ON klauzula, ale zamiast tego przekazujesz 3 argumenty do join() . Użyj and_() aby połączyć predykaty, tak jak w surowym SQL:
already_in_db_query = db.session.query(MyModel)\
.join(cte,
and_(cte.c.field1 == MyModel.field1,
cte.c.field2 == MyModel.field2),
).all()