It's because the return value of `(( expression ))` is not used for error indication. From the `bash` manpage:
> (( _expression_ ))
>
> The _expression_ is evaluated according to the rules described below under **ARITHMETIC EVALUATION**. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to **let** " _expression_ ".
So, in your case, because the value of the expression **is** zero, the return status of `(( ... ))` is 1.