あなたの仮定は正しいです、これはそれを行うための最適な方法であり、それはアップサート/マージと呼ばれます。
UPSERTの重要性-sqlservercentral.comから:
上記の場合の更新ごとに、EXISTSの代わりにUPSERTを使用すると、テーブルから1つの追加の読み取りが削除されます。残念ながら、Insertの場合、UPSERTメソッドとIF EXISTSメソッドの両方で、テーブルで同じ数の読み取りが使用されます。追加のI/Oを正当化する非常に正当な理由がある場合に実行されます。物事を行うための最適化された方法は、DBでの読み取りができるだけ少なくなるようにすることです。
最善の戦略は、更新を試みることです。更新の影響を受ける行がない場合は、挿入します。ほとんどの場合、行はすでに存在し、必要なI/Oは1つだけです。
編集 :この回答とリンクされたブログ投稿をチェックして、このパターンの問題とそれを安全に機能させる方法について学んでください。