Anda harus melakukan metode "pengecualian coba-dan-tangkap" hanya karena Anda tetap harus melakukannya.
Jika Anda memeriksa terlebih dahulu, tidak ada yang dapat menghentikan seseorang menyisipkan baris untuk pengguna tersebut antara cek dan sisipan Anda, dalam hal ini pengguna akan berada di tabel meskipun cek Anda tidak menemukannya.
Kurang mampu menjalankan check-and-insert dalam semacam transaksi (sehingga tidak ada orang lain yang dapat memasukkan pengguna itu untuk sementara). Anda tidak dapat memastikan bahwa non-pengecualian akan berhasil.
Dan meskipun banyak DBMS yang menyediakan dukungan transaksional, saya tidak tahu ada yang akan mengunci baris yang belum Anda masukkan :-)
Tentu saja, jika aplikasi Anda dirancang sedemikian rupa sehingga hanya proses Anda yang akan memasukkan pengguna (dan diserialisasi), Anda dapat menggunakan metode check-first. Tapi saya akan memberikan banyak komentar yang menyatakan bahwa itu perlu ditinjau kembali jika Anda meningkatkannya.