The easiest way for a one-off is
$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$
where $ represents the prompt of the initial shell and $$ represents the prompt of the subshell. This works in bash and zsh; in ksh you need HISTFILE=/notwritable instead. Note that what matters is the value of HISTFILE when the history file is written, not when the command is run. Bash, ksh and zsh write to the history file when they exit (zsh can do it more often depending on configuration).
Alternatively, you can get bash or zsh to ignore lines matching certain patterns (this is already covered by other answers).
Another possibility in zsh is
% fc -p
% secret-command
% fc -P
fc -p pushes the current history list onto a stack and starts a new one that isn't associated with a save file. fc -P pops that unsaved history list off the stack and forgets about it altogether.
While a process is running, the command and its arguments (and on some systems its environment as well) will show up in the process table (ps output). Root can see past commands in the system accounting database, and can do more logging without your control. And there'll probably be all kinds of forensic evidence that can show roughly what command you ran (such as file modification times). So you don't get privacy against determined eavesdroppers.