Esto es por diseño y siempre sucederá.
¿Por qué?
Tomemos 2 transacciones superpuestas que están haciendo INSERT
- La transacción 1 hace un INSERT, obtiene el valor (digamos 42), hace más trabajo
- La transacción 2 hace un INSERT, obtiene el valor 43, hace más trabajo
Entonces
- La transacción 1 falla. Rueda hacia atrás. 42 permanece sin usar
- La transacción 2 se completa con 43
Si se garantizaran valores consecutivos, cada transacción tendría que ocurrir una tras otra. No muy escalable.
Consulte también Hacer que los registros insertados siempre reciban identidad contigua valores (SQL Server pero se aplica el mismo principio)