Underfrågor är det logiskt korrekta sättet att lösa problem med formen "Hämta fakta från A, villkorat av fakta från B". I sådana fall är det mer logiskt att fästa B i en underfråga än att göra en join. Det är också säkrare, i praktisk mening, eftersom du inte behöver vara försiktig med att få duplicerade fakta från A på grund av flera matcher mot B.
Rent praktiskt handlar dock svaret oftast om prestanda. Vissa optimerare suger citroner när de ges en join kontra en underfråga, och vissa suger citroner åt andra hållet, och detta är optimerarspecifikt, DBMS-versionsspecifikt och frågespecifikt.
Historiskt sett brukar explicita kopplingar vinna, därav den etablerade visdomen att kopplingar är bättre, men optimerare blir bättre hela tiden, och därför föredrar jag att först skriva frågor på ett logiskt sammanhängande sätt och sedan omstrukturera om prestationsbegränsningar motiverar detta.