Normalmente no, pero depende (respuesta más frecuentemente utilizado para SQL Server!)
SQL Server tendrá que bloquear los datos implicados en una transacción de alguna manera. Tiene que bloquear los datos en la tabla y los datos con los índices afectados, mientras realiza una modificación. Para mejorar la simultaneidad, hay varias "granularidades" de bloqueo que el servidor podría decidir usar, para permitir la ejecución de múltiples procesos: bloqueos de fila, bloqueos de página y bloqueos de tabla son comunes (hay más). Qué escala de bloqueo está en juego depende de cómo el servidor decide ejecutar una actualización determinada. Para complicar las cosas, también hay clasificaciones de bloqueos como exclusivo compartido, exclusivo e intento exclusivo, que controlan si el objeto bloqueado se puede leer y/o modificar.
Según mi experiencia, SQL Server utiliza principalmente bloqueos de página para cambios en pequeñas porciones de tablas, y más allá de un umbral escalará automáticamente a un bloqueo de tabla, si una porción más grande de una tabla parece afectada por una actualización o eliminación. La idea es que bloquear una tabla (un bloqueo) sea más rápido que obtener y administrar miles de bloqueos de fila o página individuales para una gran actualización.
Para ver lo que está sucediendo en su caso específico, debería consultar la lógica de la consulta y, mientras se está ejecutando, examine las condiciones de bloqueo/bloqueo en sys.dm_tran_locks, sys.dm_os_waiting_tasks u otros DMV. Desearía descubrir qué es exactamente lo que está bloqueado por qué paso en cada uno de sus procesos, para descubrir por qué uno está bloqueando al otro.
Siempre utilizo consejos de bloqueo, así que estoy usando explícitamente a with (rowlock) para no terminar con un pagelock – Middletone