They're versions of the same thing, and 9.12.1 was chronologically before 9.10.3. It looks like you can find the entire chronology at https://www.haskell.org/ghc/blog.html
> whoever decides the GHC release numbers should be pulled aside and given a quick talk about how version numbers are supposed to work.
9.10.3 is a patch for the 9.10 version which was published after 9.12.1 but relates to an older version. Haskell keeps maintaining multiple versions of the toolchain.