It depends on the form, I think. Some forms may make sense as a table -- for example, one where you have a series of key-value pairs:
<table>
<tr>
<th scope="row"><label for="first-name">First Name:</label></th>
<td><input type="text" name="first_name" id="first-name" /></td>
</tr>
<tr>
<th scope="row"><label for="last-name">Last Name:</label></th>
<td><input type="text" name="last_name" id="last-name" /></td>
</tr>
<tr>
<th scope="row"><label for="color">Favorite Color:</label></th>
<td><input type="text" name="color" id="color" /></td>
</tr>
</table>
The combination of LABEL elements using FOR attributes that correspond to the ID of the associated INPUT means that screen readers will be able to read the form sensibly. I've added TH elements to indicate the semantic relationship within the table between the LABEL cells and the INPUT cells.
However, doing it that way would not be my first choice. The presence of the table markup will make it more laborious to listen to using a screen reader, due to the announcement of each table row/cell. Some of the semantic information from the table (the association of TH header with TDs in the row) actually duplicates the semantic link between the LABEL and the INPUT, so that with a screen reader you may wind up listening twice to the same information about how these things are related.
Instead, I would do something like this:
<style type="text/css">
label { display: block; text-align: right; }
label input { width: 100px; }
</style>
<label for="first-name">First Name: <input type="text" name="first_name" id="first-name" /></label>
<label for="last-name">Last Name: <input type="text" name="last_name" id="last-name" /></label>
<label for="color">Favorite Color: <input type="text" name="color" id="color" /></label>
That would give you much the same effect with less HTML. It has the labels associated with their inputs both explicitly (using FOR/ID) and implicitly (because the INPUTs are child elements of the LABELs). It does mean that you have to be able to anticipate how wide your inputs have to be, and there's a ragged left edge due to all the text being right-aligned.
There's also the problem of adding in checkboxes and radio buttons. In their case, it makes sense to have the input first and the label after it; but that doesn't look very good with the example I've given.
So, basically? Formatting forms is a pain in the butt. Although they often consist of name-value pairs that would make logical sense as a table, there are potential accessibility issues with that approach. I would strongly prefer to avoid tables-based solutions for a problem like this, unless you have a compelling reason for using tables.