Du bör göra "försök-och-fånga undantag"-metoden helt enkelt för att du måste göra det ändå.
Om du kontrollerar först, finns det inget som hindrar någon från att infoga en rad för den användaren mellan din check och din inlaga, i så fall kommer användaren att finnas i tabellen även om din check inte hittade den.
Kort om att kunna köra check-and-insert inom någon sorts transaktion (så att ingen annan kan infoga den användaren under tiden). du kan inte vara säker på att icke-undantaget kommer att fungera.
Och även om många DBMS tillhandahåller transaktionsstöd känner jag inte till några som kommer att låsa en rad som du ännu inte har infogat :-)
Naturligtvis, om din applikation är utformad på ett sådant sätt att endast din process kommer att infoga användare (och serialiserad), kan du använda check-first-metoden. Men jag skulle lägga in många kommentarer om att det kommer att behöva ses över om du någonsin skalar upp.