O segundo argumento para
Query.join() deve neste caso ser o ON completo cláusula, mas em vez disso você passa 3 argumentos para join() . Use and_() para combinar os predicados, como é feito no SQL bruto:already_in_db_query = db.session.query(MyModel)\
.join(cte,
and_(cte.c.field1 == MyModel.field1,
cte.c.field2 == MyModel.field2),
).all()