Como se indica en la documentación para ese constructor:
Simplemente estabas llamando a un constructor diferente de lo que pensabas en tu caso.
La razón de esto es que C# permite un implícito conversión del literal entero 0 a tipos de enumeración (que son solo tipos integrales debajo), y esta conversión implícita hace que (string, SqlDbType) constructor sea una mejor combinación para la resolución de sobrecarga que la conversión de boxeo necesaria para convertir int a object para el (string, object) constructor.
Esto nunca será un problema cuando pasas un int variable , incluso si el valor de esa variable es 0 (porque no es un literal cero), o cualquier otra expresión que tenga el tipo int . Tampoco sucederá si lanza explícitamente el int a object como se ve arriba, porque entonces solo hay una sobrecarga coincidente.