Twoje założenie jest słuszne, jest to optymalny sposób na zrobienie tego i nazywa się to upsert/merge.
Znaczenie UPSERT - z sqlservercentral.com:
Dla każdej aktualizacji w wyżej wymienionym przypadku usuwamy jeden dodatkowy odczyt z tabeli, jeśli użyjemy UPSERT zamiast EXISTS. Niestety w przypadku Insert zarówno metody UPSERT, jak i IF EXISTS używają tej samej liczby odczytów tabeli. Dlatego sprawdzanie istnienia powinno być tylko należy to zrobić, gdy istnieje bardzo ważny powód, aby uzasadnić dodatkowe I/O. Zoptymalizowanym sposobem robienia rzeczy jest upewnienie się, że masz mało odczytów w bazie danych.
Najlepszą strategią jest próba aktualizacji. Jeśli aktualizacja nie ma wpływu na żadne wiersze, wstawiaj. W większości przypadków wiersz już istnieje i wymagane będzie tylko jedno wejście/wyjście.
Edytuj :Zapoznaj się z tą odpowiedzią i powiązanym postem na blogu, aby dowiedzieć się o problemach z tym wzorcem i jak zapewnić jego bezpieczeństwo.