Du bør gøre "prøv-og-fang undtagelse"-metoden, simpelthen fordi du skal gøre det alligevel.
Hvis du tjekker først, er der intet til hinder for, at nogen indsætter en række for den pågældende bruger mellem din check og dit indstik, i hvilket tilfælde brugeren vil være i tabellen, selvom din check ikke fandt den.
Kort for at være i stand til at køre check-and-insert inden for en form for transaktion (så ingen andre kan indsætte den bruger i mellemtiden). du kan ikke være sikker på, at ikke-undtagelsen vil virke.
Og selvom mange DBMS'er yder transaktionssupport, kender jeg ikke til noen der låser en række, du endnu ikke har indsat :-)
Selvfølgelig, hvis din applikation er designet på en sådan måde, at kun din proces vil indsætte brugere (og serialiseres), kan du bruge check-first-metoden. Men jeg ville indsætte mange kommentarer til, at det skal tages op igen, hvis du nogensinde skalerer op.