Eu usaria o bloco try/catch quando o caminho normal pelo código deveria prosseguir sem erros, a menos que houvesse realmente algumas condições excepcionais - como o servidor estar inativo, suas credenciais expiradas ou incorretas. Eu não o usaria necessariamente para lidar com erros não excepcionais - digamos, como o usuário atual não estar na função correta. Ou seja, quando você pode razoavelmente esperar e lidar com um erro que não é uma condição excepcional, acho que você deve fazer suas verificações.
No caso que você descreveu -- configurar e executar uma consulta, um bloco try/catch é uma excelente maneira de lidar com isso, pois normalmente você espera que a consulta seja bem-sucedida. Por outro lado, você provavelmente desejará verificar se o conteúdo do resultado é o que você espera com a lógica de fluxo de controle, em vez de apenas tentar usar dados que podem não ser válidos para sua finalidade.
Uma coisa que você quer observar é o uso desleixado de try/catch. Try/catch não deve ser usado para se proteger de programação ruim - o tipo "Eu não sei o que vai acontecer se eu fizer isso, então vou envolvê-lo em um try/catch e esperar o melhor" de programação. Normalmente, você desejará restringir os tipos de exceções que você captura àqueles que não estão relacionados ao próprio código (servidor inativo, credenciais incorretas, etc.) .).