with_polymorphic() is generally only useful with joined table inheritance (note this is single table inheritance), and is used to add those subclass tables to the Query so that you can filter() on their criterion, as well as to allow more columns to be pulled in via a single query rather than needing to invoke additional queries for subclass tables. It does not indicate a subset of subclasses to be included.
If you want to load A's of type B, C, but not D, you'd need to do this manually via the discriminator - since B, C and D are all As you normally will get back all three as the rows determine.
session.query(A).filter(A.type_.in(0, 1, 2))