If there are more than one rows in my source that do not match my target, and inserting one causes a match (and would cause there to be no NOT MATCHED had it been present), am I safe in the assumption that all will get merged? That is, the records in the source that will be merged are identified and destined to merge before any of them are added? That’s how it appears to work and nothing below contradicts it but I’m not sure it’s a definitive guarantee.
WHEN NOT MATCHED [ BY TARGET ] THEN
Specifies that a row is inserted into target_table for every row returned by<table_source> ON <merge_search_condition> that does not
match a row in target_table, but does satisfy an additional search
condition, if present. The values to insert are specified by the
<merge_not_matched> clause. The MERGE statement can have only one WHEN
NOT MATCHED clause.
The merge scans every row, and it only makes one pass through the data. Therefore, all the records that satisfy your WHEN MATCHED clause at the time your statement is executed will be affected, and only the records that satisfy the WHEN NOT MATCHED clause at the time the statement is executed will be affected.