I had a look at the code. I think what is happening is that the default dictionary in ispell-dictionary-base-alist uses only [A-Za-z] for word chars and [^A-Za-z] for non-word chars. The assumption is that this works for ispell (the program). Then, [[:alpha:]] and [^[:alpha:]] are used in the default 'nil'-keyed entry for aspell. As far as I can tell from the rather hairy hunspell code, it too does not set a default entry.
Since ispell is the only spellchecker Emacs supports that can't cope with [[:alpha:]], it would seem more sensible to have a default (nil-keyed) setting in ispell-dictionary-base-alist, and to overwrite the default with [A-Za-z] only if the spellchecker is really ispell.
This way, duplicate code can be removed and future spellcheckers will not need to rediscover this problem.
(I never came across this problem because I have customized ispell-local-dictionary-alist with my own nil entry!)