Le sottoquery sono il modo logicamente corretto per risolvere i problemi del modulo "Ricevi fatti da A, condizionato dai fatti da B". In questi casi, ha più senso logico inserire B in una sottoquery piuttosto che eseguire un join. È anche più sicuro, in senso pratico, dal momento che non devi essere cauto nell'ottenere fatti duplicati da A a causa di più partite contro B.
In pratica, tuttavia, la risposta di solito si riduce alle prestazioni. Alcuni ottimizzatori succhiano i limoni quando viene assegnato un join rispetto a una sottoquery, e altri succhiano i limoni nell'altro modo, e questo è specifico dell'ottimizzatore, specifico della versione DBMS e specifico della query.
Storicamente, i join espliciti di solito vincono, quindi è opinione comune che i join siano migliori, ma gli ottimizzatori migliorano continuamente, quindi preferisco scrivere prima le query in modo logicamente coerente, quindi ristrutturarle se i vincoli di prestazioni lo giustificano.