Exactly. The primary purpose of type declarations in Common Lisp is to give the compiler a hint that you are taking responsibility for type management so the machine code doesn't need to check the type at runtime. But the spec does not
require that the compiler obey that hint, and if the compiler
does obey the hint the spec says it's not the compiler's fault if you screw up the type that you took responsibility for.
An additional purpose for type declarations is not mentioned in the spec: Static analysis. SBCL goes the extra mile and does do some static analysis with your type declarations, which means it catches many kinds of programmer errors at compile time. Not all CL implementations do this.
If you want a Common Lisp that performs thorough static analysis, use Coalton.