Всё зависит от конкретных обстоятельств. На уровне БД проверка запросом может быть на порядок быстрее попытки вставить дубликат. На уровне приложения из-за накладных расходов разница будет меньше, иногда существенно.
А дальше в дело вступают вероятности. Насколько вероятно напороться на дубликат? Если такое явление редкость, то заморачиваться не нужно - делать уникальный ключ и сразу инсертить. Если большая часть попыток записи завершается ошибкой, можно попробовать сначала делать запрос, и в случае неудачи генерировать новый ключ в приложении. Но в этом случае напрашивается другое решение: сгенерировать ключ непосредственно во время вставки средствами БД и вернуть его как результат операции.