Borders on tables are always a bit flaky. One possibility would be to add a border-right declaration to each table cell except for the ones in right-most column. If you're using any kind of table-spacing this won't work very well.
Another option would be to use a 1px high background image with the borders inside it, but that'll only work if you can guarantee the width of each cell at all times.
Another possibility is to experiment with colgroup / col. This had fairly horrible support cross-browser the last time i looked at it but could have improved since then: http://www.webmasterworld.com/forum83/6826.htm
The column on the left gets a border on the right, the column on the right gets a border on the left and the the middle column is already taken care of by the left and right.
If your columns are inside a div/wrapper/table/etc... don't forget to add extra space to accomodate the width of the borders.
I know this is an old question, but there is a simple, one line solution which works consistently for Chrome, Firefox, etc., as well as IE8 and above (and, for the most part, works on IE7 too - see http://www.quirksmode.org/css/selectors/ for details):
table td + td { border-left:2px solid red; }
The output is something like this:
Col1 | Col2 | Col3
What is making this work is that you are defining a border only on table cells which are adjacent to another table cell. In other words, you're applying the CSS to all cells in a row except the first one.
By applying a left border to the second through the last child, it gives the appearance of the line being "between" the cells.