SQL Query advice needed, Is there any better way

Following query gives results but i would like to know
is there any other better approach? Thanks

Sql Query: find all animals who eats all animals except itself

select * from [dbo].Animal a
where (
(
(select COUNT(distinct id) from [dbo].Animal b
where  b.id <> a.id)
=
(select COUNT(*) from [dbo].Food
where  pId = a.id and aId <> a.id)
) 
AND
(select COUNT(*) from [dbo].Food
where  pId = a.id and aId = a.id) = 0
)

Animal table

id	name
--------
1	Ant
2	Bear
3	Cat
4	Dog

Food table (here pId is predatorId)

pId	aId
-------
1	2
1	3
1	4
2	1
2	2
2	3
2	4
3	1
3	2
3	4

I got answer

select pid
from food
group by pid
having count(*) = (select count(*) - 1 from animal) and
       sum(case when aid = pid then 1 else 0 end) = 0