Scriverei. = 0 non > 0
codice:
SELECT X.ID
FROM tabella_1 AS X
WHERE (SELECT count(Y.ID) FROM tabella_2 as Y WHERE Y.FK_tabella_1 = X.ID AND (Y.stato = 0 OR Y.stato = 1)) = 0
Poi se hai sempre tre stati e vuoi solo sapere quali sono gli id che hanno solo lo stato 2 allora puo' anche andare bene.
Ma se hai più di tre stati o se vuoi sapere quali sono gli id con solo lo stato 0 per esempio allora non va.
In effetti dovresti fare una query specifica per ogni stato e se ne aggiungi uno allora devi modificare tutte le query.
codice:
SELECT X.ID
FROM tabella_1 AS X
WHERE
(SELECT count(DISTINCT stato) FROM tabella_2 as Y WHERE Y.FK_tabella_1 = X.ID)=1
AND
(SELECT count(*) FROM tabella_2 as Y WHERE Y.FK_tabella_1 = X.ID AND Y.stato = 2)<>0