set-default-font by default sets the font for current frame only from the documentation C-hf
set-default-fontRET (emphasis mine)
(set-default-font FONT &optional KEEP-SIZE FRAMES)
This function is obsolete since 23.1; use `set-frame-font' instead.
Set the default font to FONT. When called interactively, prompt for
the name of a font, and use that font on the selected frame. When
called from Lisp, FONT should be a font name (a string), a font
object, font entity, or font spec.
If KEEP-SIZE is nil, keep the number of frame lines and columns fixed.
If KEEP-SIZE is non-nil (or with a prefix argument), try to keep the
current frame size fixed (in pixels) by adjusting the number of lines
If FRAMES is nil, apply the font to the selected frame only. If FRAMES
is non-nil, it should be a list of frames to act upon, or t meaning
all existing graphical frames. Also, if FRAMES is non-nil, alter the
user's Customization settings as though the font-related attributes of
the `default' face had been "set in this session", so that the font is
applied to future frames.
So the solution is to do
(set-default-font "Inconsolata-20" nil t)
Also please note that this function is obsolete since emacs 23.1. Use
set-frame-font instead, the API is same
Additional methods for setting font
For sake of completeness I am mentioning additional methods for setting default font
default-frame-alist, mentioned by @Drew
(add-to-list 'default-frame-alist '(font . "Inconsolata-20"))
default face, mentioned by @wasamasa, by doing something like the following
(set-face-font 'default "Inconsolata-20")
Alternately you can use the
customize interface, mentioned by @VitoshKa, M-x