Váš předpoklad je správný, toto je optimální způsob, jak toho dosáhnout a nazývá se upsert/merge.
Význam UPSERT - z sqlservercentral.com:
Pro každou aktualizaci ve výše uvedeném případě odstraňujeme z tabulky jedno dodatečné čtení, pokud použijeme UPSERT místo EXISTS. Bohužel pro přílohu používají metody UPSERT i IF EXISTS stejný počet čtení v tabulce. Proto by kontrola existence měla pouze být proveden, když existuje velmi platný důvod ospravedlnit dodatečné I/O. Optimalizovaný způsob, jak dělat věci, je zajistit, abyste měli v DB co nejméně čtení.
Nejlepší strategií je pokus o aktualizaci. Pokud aktualizace neovlivní žádné řádky, vložte. Ve většině případů bude řádek již existovat a bude vyžadován pouze jeden I/O.
Upravit :Podívejte se prosím na tuto odpověď a na odkazovaný příspěvek na blogu, kde se dozvíte o problémech s tímto vzorem a o tom, jak zajistit jeho bezpečné fungování.