Bueno, su expresión XPath aquí es el "culpable":
query('//branch')
Esto dice:selecciona todos <branch> nodos de todo el documento. Solo está haciendo lo que le dices que haga, de verdad....
¿Qué tiene de malo esta consulta aquí?
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Eso recuperaría todo el <branch> subnodos para el <book> nodo que tiene type="SF" como atributo....
¿Qué intenta lograr con su query()? , exist() y value() todo en el mismo comunicado?? Muy posiblemente, se puede hacer mucho más fácil....
Además:creo que estás malinterpretando lo que .exist() en SQL Server XQuery sí. Si tienes tu declaración aquí:
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
básicamente le estás diciendo a SQL Server que recupere todas las filas de dbo.TableA donde el XML almacenado en XMLData contiene un <book type=.....> nodo - está seleccionando filas de la tabla - NO aplicar una selección a XMLData contenido de la columna...