You don't need to specify the full path in the
exist
test; you just want to test against the current
<Book>
node, rather than the whole document:
SELECT data.col.value('@ID', 'varchar(100)')
FROM @x.nodes('/Books/Book') As data(col)
WHERE data.col.exist('Pages/Page[@ID="Index"]') = 0;