Przetestowałem podzapytanie @Abdullah i rzeczywiście otrzymałem przeciwieństwo tego, czego chciałem. Po krótkich testach uzyskałem zagnieżdżone zapytania, które dają mi to, czego szukałem:
select distinct entity_id from construction
where entity_id not in (
select entity_id from construction c left outer join available a on a.id = c.component_id
where a.id is null
);