Subquery's zijn de logisch juiste manier om problemen van de vorm op te lossen:"Get facts from A, conditional on facts from B". In dergelijke gevallen is het logischer om B in een subquery te plaatsen dan om een join uit te voeren. Het is ook in praktische zin veiliger, omdat u niet voorzichtig hoeft te zijn met het krijgen van dubbele feiten van A vanwege meerdere overeenkomsten met B.
Praktisch gesproken komt het antwoord echter meestal neer op prestaties. Sommige optimisers zuigen citroenen wanneer ze een join versus een subquery krijgen, en sommige zuigen citroenen de andere kant op, en dit is optimiser-specifiek, DBMS-versie-specifiek en query-specifiek.
Historisch gezien winnen expliciete joins meestal, vandaar de gevestigde wijsheid dat joins beter zijn, maar optimizers worden steeds beter, en daarom geef ik er de voorkeur aan om eerst query's op een logisch coherente manier te schrijven en vervolgens te herstructureren als prestatiebeperkingen dit rechtvaardigen.