¿Por qué insertar el bloque de instrucciones TSQL cuando el nivel de aislamiento de la transacción para otra transacción es serializable con un filtro no conflictivo?

Los niveles de aislamiento de transacciones serializables evitan el problema de las lecturas fantasmas al bloquear cualquier inserción en una tabla en una transacción que esté en conflicto con cualquier instrucción select en otras transacciones. Estoy tratando de entenderlo con un ejemplo, pero bloquea la inserción incluso si el filtro en la instrucción select no es conflictivo. Agradecería cualquier explicación sobre por qué se comporta de esa manera.

Script de tabla

CREATE TABLE [dbo].[dummy](
    [firstname] [char](20) NULL,
    [lastname] [char](20) NULL
) ON [PRIMARY]

GO

Sesión 1

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin tran
select * from dummy where firstname = 'abc'

Sesión - 2

insert into dummy values('lmn', 'lmn') -- Why this blocks?

Respuestas a la pregunta(2)

Su respuesta a la pregunta