This is normal because most terminals do not support truecolor (24 bit color, specifying 16+ million colors). So the terminal only has 256 colors, while your GUI has more. For instance, macOS's built in terminal program Terminal.app only supports 256 colors (as of 2020-03-02).
However, if you use the right terminal app, and if you invoke a modern version of emacs (26.1+) in the right way, then you can get truecolor in the terminal and it will match what you see in the GUI.
The emacs docs describe how to invoke emacs to use truecolor. You need to create a new record in your terminfo database and then set an environmental variable to point to it. Your terminal app should indicate if it supports truecolor (and this gist collects information about support in various terminal).
FWIW, I got this working with emacs 26.1, so that what I see when connected to a remote ubuntu machine via iTerm2 exactly matches what I see running emacs locally on my Mac in GUI mode.