Vous devriez utiliser la méthode "try-and-catch exception" simplement parce que vous devez le faire de toute façon.
Si vous vérifiez d'abord, rien n'empêche quelqu'un d'insérer une ligne pour cet utilisateur entre votre vérification et votre insertion, auquel cas l'utilisateur sera dans le tableau même si votre vérification ne l'a pas trouvé.
À moins de pouvoir exécuter la vérification et l'insertion dans une sorte de transaction (afin que personne d'autre ne puisse insérer cet utilisateur dans l'intervalle). vous ne pouvez pas être certain que la non-exception fonctionnera.
Et bien que de nombreux SGBD fournissent un support transactionnel, je n'en connais aucun cela verrouillera une ligne que vous n'avez pas encore insérée :-)
Bien sûr, si votre application est conçue de manière à ce que seul votre processus insère des utilisateurs (et sérialise), vous pouvez utiliser la méthode check-first. Mais je mettrais de nombreux commentaires à l'effet qu'il faudra le revoir si jamais vous augmentez.