The column 1 style is not applied to the node in the entries in column 1 but to the cell. With a standard matrix (ie not one with matrix of nodes) then the cell can contain things other than nodes so the style has to be more general. So you should consider the cells as scopes, not paths. And to affect the nodes within a scope you need to use the every node/.style={...} key. That is, if you want to use a scope to affect a node you write:
\begin{scope}[every node/.style={draw=blue}]
\node {This will have a blue outline};
\end{scope}
So you need to do the same with the matrix. Thus column 1/.style={every node/.style={draw = red, fill = blue, text = green}} is correct. It might seem a little clunky, but it's there because of the greater flexibility in cell contents.
If there isn't already (and without looking in the manual I don't know) then you could define a style column 1 nodes which did the double for you.
\documentclass{article}
%\url{http://tex.stackexchange.com/q/133636/86}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[matrix of nodes, column 1/.style={every node/.style={draw=red, fill=blue, text=green}}] {
A & B \\
C & D \\
};
\end{tikzpicture}
\tikzset{column 1 nodes/.style={column 1/.style={every node/.style={#1}}}}
\begin{tikzpicture}
\matrix[matrix of nodes, column 1 nodes={draw=red, fill=blue, text=green}] {
A & B \\
C & D \\
};
\end{tikzpicture}
\end{document}
column #1 nodes=#2, in a more elegant way than using a foreach loop to define many options? I triedcolumn/.style args={#1:#2}{column #1/.style={every node/.style={#2}}}, which is used like this:\matrix[matrix of nodes, column=1:{draw=red}, column=2:{draw=blue}] { ... };, but the syntax doesn't feel quite as idiomatic as it should. – Suzanne Soy Sep 16 '13 at 17:50column <n>styles, it just tries to execute them, and because it executes them when it knows the column number then it just has to docolumn \the\pgfmatrixcurrentcolumn/.try. You could try emulating that, but my initial experiments draw blank. – Andrew Stacey Sep 16 '13 at 18:26every node/.stylehere and rather useevery node/.append styleto not overwrite thename=<matrix>-<row>-<column>setting ofmatrix of nodes(different in CVS). @GeorgesDupéron Take a look at this answer and itsrowsstyle definition where one can apply the same style to multiple rows (same for columns) via the help of an auxiliary style and the.listhandler. – Qrrbrbirlbel Sep 16 '13 at 18:39