Dovresti eseguire il metodo "try-and-catch eccezione" semplicemente perché devi farlo comunque.
Se controlli prima, non c'è nulla che impedisca a qualcuno di inserire una riga per quell'utente tra il tuo assegno e il tuo inserto, nel qual caso l'utente sarà nella tabella anche se il tuo assegno non l'ha trovato.
A meno di essere in grado di eseguire il check-and-insert all'interno di una sorta di transazione (in modo che nessun altro possa inserire quell'utente nel frattempo). non puoi essere certo che la non eccezione funzionerà.
E sebbene molti DBMS forniscano supporto transazionale, non ne conosco nessuno che bloccherà una riga che devi ancora inserire :-)
Ovviamente, se la tua applicazione è progettata in modo tale che solo il tuo processo inserirà utenti (e serializzerà), puoi utilizzare il metodo check-first. Ma inserirei numerosi commenti sul fatto che dovrà essere rivisitato se mai si aumentasse.