Isso é por design e sempre acontecerá.
Por quê?
Vamos pegar 2 transações sobrepostas que estão fazendo INSERTs
- A transação 1 faz um INSERT, obtém o valor (digamos 42), faz mais trabalho
- A transação 2 faz um INSERT, obtém o valor 43, faz mais trabalho
Então
- A transação 1 falha. Rola para trás. 42 permanece sem uso
- A transação 2 é concluída com 43
Se fossem garantidos valores consecutivos, todas as transações teriam que acontecer uma após a outra. Não muito escalável.
Consulte também Os registros inseridos sempre recebem identidade contígua Valores (SQL Server, mas o mesmo princípio se aplica)