Ecco come l'ho fatto:
map_ids = session.query(Table1.map_id). \
filter(Table1.xxxx == 'xxx_value')
q = session.query(Table2). \
filter(Table2.map_id.in_(map_ids.subquery()))
q.delete(synchronize_session=False)
La chiave qui è creare sottoquery trovando gli ID che devono essere eliminati. Quindi utilizzi l'operatore 'in_' per selezionare i record da eliminare. 'synchoronize_session=False' eseguirà la query senza aggiornare la sessione. Questo dà il miglior aumento delle prestazioni.