Here is a small script and the result from them is not the same based on the suggestions in BOL.
Merge both tables but update column [c2] in the target only if c2 = 'C'.
SET NOCOUNT ON;
USE tempdb;
GO
DECLARE @T1 TABLE (
c1 int NOT NULL PRIMARY KEY,
c2 varchar(15) NOT NULL
);
DECLARE @T2 TABLE (
c1 int NOT NULL PRIMARY KEY,
c2 varchar(15) NOT NULL UNIQUE
);
INSERT INTO @T1 (c1, c2)
VALUES (1, 'A'), (2, 'C');
INSERT INTO @T2 (c1, c2)
VALUES (1, 'AA'), (2, 'B'), (3, 'C');
SELECT * FROM @T1;
SELECT * FROM @T2;
MERGE INTO @T1 AS T1
USING @T2 AS T2
ON T1.c1 = T2.c1 AND T1.c2 = 'C'
WHEN MATCHED THEN
UPDATE SET T1.c2 = T2.c2
WHEN NOT MATCHED BY SOURCE THEN
DELETE
WHEN NOT MATCHED BY TARGET THEN
INSERT (c1, c2) VALUES (T2.c1, T2.c2);
SELECT * FROM @T1;
SELECT * FROM @T2;
GO
SET NOCOUNT ON;
USE tempdb;
GO
DECLARE @T1 TABLE (
c1 int NOT NULL PRIMARY KEY,
c2 varchar(15) NOT NULL
);
DECLARE @T2 TABLE (
c1 int NOT NULL PRIMARY KEY,
c2 varchar(15) NOT NULL UNIQUE
);
INSERT INTO @T1 (c1, c2)
VALUES (1, 'A'), (2, 'C');
INSERT INTO @T2 (c1, c2)
VALUES (1, 'AA'), (2, 'B'), (3, 'C');
SELECT * FROM @T1;
SELECT * FROM @T2;
MERGE INTO @T1 AS T1
USING @T2 AS T2
ON T1.c1 = T2.c1
WHEN MATCHED AND T1.c2 = 'C' THEN
UPDATE SET T1.c2 = T2.c2
WHEN NOT MATCHED BY SOURCE THEN
DELETE
WHEN NOT MATCHED BY TARGET THEN
INSERT (c1, c2) VALUES (T2.c1, T2.c2);
SELECT * FROM @T1;
SELECT * FROM @T2;
GO
Notice that in the first script we still update the tuple (1, 'A') even though there is no match by the conditions expressed as part of the ON subclause.
What BOL is enphasizing is that in the ON clasue we should use just the columns that relate both sets and any extra condition should be used in the <clause_search_condition> part of the subbranches.