How does TikZ/PGF place text inside a node?
For simple nodes (and I will be using the rectangle shape for this example) with one part TikZ puts all node contents in one TeX box (with a width, a height and a depth as usual) and constructs a path around it with the padding /pgf/inner xsep and /pgf/inner ysep.
The center of the node will be the center of the TeX box. With boxes with different heights and depths this will not be on the same vertical height (relative to the baseline) across boxes.
How does TikZ places nodes?
In your example, you use left and right which is basically the same as anchor=east and anchor=west respectively. These anchors lie on the same vertical height as the center anchor (by definition) and on the respective border of the node.
As you can see from the following image (taken from the PGFmanual, section 66.2 Predefined Shapes) you can see the effects much more clearer thanks to a ridiculous high line:

All shapes also provide anchors that are based on the actual text's baseline: text, base, base west and base east as well as mid, mid west and mid east. This makes it already possible to use
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw [thick, ->] (0,0) -- node[at start, anchor=mid east] {Source}
node[at end, anchor=mid west] {Target} (1,0);
\end{tikzpicture}
\end{document}
(Of course, if the border is drawn you will get border on different vertical heights again but then you can use text depth and text height and/or \strut (which equals text depth=+.3\baselineskip, text height=+.7\baselineskip.)
A silly problems with mid anchors
The mid anchors lie 0.5ex above the baseline (and its anchors). But careful! Even though this is a length unit dependent on font size, TikZ implements it a bit silly. Observe what happens when you add [nodes={font=\Huge}] to the tikzpicture environment of the example above:

With [nodes={/utils/exec=\Huge}] (or just using \Huge after the start of the tikzpicture) you get an output you might have expected.
How does TikZ draw a path between nodes?
The mid anchors seem like a good solution, right?
Even if you position the nodes in a manner so that their baselines (or their "midlines") are positioned on the same vertical height, the connection as in
\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (s) {Source}; \node (t) [mid right=of s] {Target};
\draw [thick, ->] (s) -- (t);
\end{tikzpicture}
\end{document}
will not be drawn to our wishes.
When you ask TikZ to connect two nodes with a shape (i.e. all but coordinates) it uses points on the border of the nodes' shapes. For a line-to (--) it "shoots" from the center of one node to the other node's center. Where this ray hits the border of the node the actual start of the line is set. This is in fact nothing different then the angular anchors, so the example above might just result in the same as
\draw [thick, ->] (s.359) -- (t.179);
The solution to all this is obvious:
\draw [thick, ->] (s.mid east) -- (t.mid west);
But this requires you to selectively choose the anchors (which can be hidden in a to path but that will also get complex fast if you want to cover all possible combinations of node placement as well as starts and targets).
Why don't we just move the center anchor then?
The tikz-cd provides a shape named asymmetrical rectangle which gives us a center anchor (and east and west) that is similar defined as the usual mid anchors. Instead of a fixed .5ex the value of the /tikz/commutative diagrams/center yshift key is used. Unfortunately, this suffers the same problem regarding font sizes as the mid anchors.

Code
\documentclass[tikz]{standalone}
\usepackage{tikz-cd}\tikzset{nodes={shape=asymmetrical rectangle}}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\draw [thick, ->] (0,0) -- node[at start, left] {Source}
node[at end, right] {Target} (1,0);
\end{tikzpicture}
\begin{tikzpicture}
\node (s) {Source}; \node (t) [right=of s] {Target};
\draw [thick, ->] (s) -- (t);
\end{tikzpicture}
\end{document}
text depth=0, then the box is drawn as if no characters had descenders. That's good to know. But, the question was how to draw the box as if there were no characters of cap-height. Based on your answer, I managed to figure out that I can do that withtext height = 1ex. So if you just add that to your first MWE, my question is answered. Feel free to edit it in - or if you don't mind I can do it. – Sverre Sep 30 '14 at 19:50text depth = 0withtext height = 1ex"? If you just add it, you get the desired result. – Sverre Sep 30 '14 at 20:09Sourcegin the first node. – percusse Sep 30 '14 at 20:40