Фильтр от Animal означает экземпляры типа Animal. Любой экземпляр типа Dog также является экземпляром типа Animal и также будет выбран. Это работает правильно. И если позже у вас будет больше подклассов и вы выберете из Animal , вы снова получите все экземпляров, включая подклассы.
Если вы хотите исключить экземпляры типа Dog , вы должны сделать это явно в своем запросе.
Я бы предложил изменить вашу модель и не использовать какой-либо дискриминатор для базового класса. Таким образом, вы избежите таких неверных ожиданий: ни один разработчик в вашей команде не будет ожидать, что выбор из Animal выберет только часть записей; все поймут, что select вернет все сущностей всех подклассов. Используйте значения дискриминатора только для подклассов.