yo,
ganz so trivial ist es leider nicht, einfach JOINS daraus zu machen und auf null werte zu achten. durch JOINS kann sich die anzahl der datensätze verändern, die man in der ergebnismenge zurück bekommt. unterabfragen in der WHERE klausel grenzen weiter ein, verändern aber die anzahl der datensätze nicht. mit einem JOIN einzuschränken kann aber sehr wohl diese anzahl verändern, kommt immer auf den kokreten fall drauf an.
des weiteren vermute ich ein logik-fehler in deiner abfrage, bedenke das AND stärker als das OR bindet, explizit bei dir in der zweiten unterabfrage.
Ilja