Yes, this is one of the well-known expansion issue of pgfplots. Depending on how one views things, one may regard your question as a duplicate of the one that lead to this answer. If you feel it is a duplicate, I'll be happy to remove this answer. Otherwise just do
\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,
poles/.style= { only marks, mark=x, mark size = 1ex, thick},
zeros/.style= { only marks, mark=o, mark size = 1ex, thick }
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle,clip=false,%<-added
xmax = 1, xmin = -8,
xtick={1,...,-9},
ymax = 2, ymin = -2,
ytick={-2,...,2},
]
\addplot[poles] coordinates {(-2,2) (-2,-2) (-8,0)};
\addplot[zeros] coordinates {(-4,0)};
\foreach \x/\y/\z in {-2/2/-90 , -2/-2/90 , -8/0/90 , -4/0/90 }{
\edef\temp{\noexpand\node[label={\z:{(\x,\y)}},inner sep=2pt] at (axis
cs:\x,\y) {};}
\temp
}
\end{axis}
\end{tikzpicture}
\end{document}

Why is that necessary? pgfplots runs a "survey phase" before it actually typesets things. And during this phase it can, in a way, forget things inside loops because there is another expansion magic taking place. For that reason, pgfplots comes with its own loop mechanism like \pgfplotsinvokeforeach and \pgfplotsforeachungrouped, see section 8.1 of the manual for more detail. My personal bottomline is to try out the above trick first, and if it works, then I am fine with it. ;-)
ADDENDUM: Here is an ugly version that allows you to add the anchors via point meta. (I have not much time now.) It works, but you can only have the anchors between 0 and 360, i.e. say -90 won't work. And there is an empty plot. The reason for this is that I have not the time now to find out how to do a better \pgfplotspointmetatransformed conversion.
\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest,
poles/.style= { scatter,
scatter src=explicit, only marks, mark=x, mark size = 1ex, thick},
zeros/.style= { scatter,
scatter src=explicit, only marks, mark=o, mark size = 1ex, thick }
}
\newcommand\myparse[1]{\pgfmathparse{#1}\typeout{\pgfmathresult}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle,clip=false,%<-added
xmax = 1, xmin = -8,
xtick={1,...,-9},
ymax = 2, ymin = -2,
ytick={-2,...,2},
visualization depends on=x \as \rawx,
visualization depends on=y \as \rawy,
visualization depends on=\pgfplotspointmetatransformed \as \mymeta,
nodes near coords style={
anchor=(\pgfplotspointmetatransformed/1000)*360
},
nodes near coords={(\pgfmathprintnumber{\rawx},\pgfmathprintnumber{\rawy})},
]
\addplot[poles,forget plot,opacity=0] coordinates {(0,0)[0] (0,0)[360]};
\addplot[poles] coordinates {(-2,2)[90] (-2,-2)[270] (-8,0)[0]};
\addplot[zeros] coordinates {(-4,0)[270]};
\end{axis}
\end{tikzpicture}
\end{document}

foreach? If yes, can I embed theforeachinside any defined style or key? For example, can I have something like\addplot[poles, label style = {angle1 , angle2 , angle3} ] coordinates {(-2,2) (-2,-2) (-8,0)};, and if I didn't set this key value (i.e.\addplot[poles, label style]) , the label is printed at a preset default angle? – Diaa Nov 20 '18 at 19:44nodes near coordsget rotated by with the usualvisualization depends onkey. – Nov 20 '18 at 19:51nodes near coords. Thanks – Diaa Nov 20 '18 at 20:01:), you might want to check my other relevant question. – Diaa Nov 21 '18 at 16:15