From some recent testing and reading I\'ve done, it seems the \"X\" (exclusive) name part of XLOCK is misleading. It in fact doesn\'t lock any more than UPDLOCK. If it were
It's not a caveat, it's a misunderstanding on what happens in SELECT.
A mere SELECT does not asks for Shared locks if the pages do not contain dirty data, and thus is not blocked by XLOCK.
To be blocked by XLOCK, you need to run in REPEATABLE READ isolation level. Two things can trigger that: