Ma scusa, i tuoi controlli sono:
IF la query da errore scrivi il messaggi d'errore
ELSE esegui la insert
Dov'è che controlli se la select ha trovato qualcosa? Certo che esegue sempre il ramo ELSE, perché la query non da errore, semplicemente non trova niente.
Nessun risultato (false sul fetch) != errore (null sul fetch, che poi in caso d'errore verrà sollevata un'eccezzione, non un semplice null)