There is lots of information in the internet regarding this common \"problem\".
Solutions like:
IF NOT EXISTS() BEGIN INSERT INTO (...) END
<
With TRY/CATCH you can avoid the extra read
BEGIN TRY
INSERT etc
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR etc
END CATCH
If you can discard duplicates, this is a highly scalable technique
Links: