Tables are for tabular data only.
Do not use the HTML table tags (<table>, <tr>, <td>, etc.) for page or module layout.
For example, do not use table rows and columns to arrange the header, sidebar and main content areas of a page or module:
<!-- This is bad! Please do not copy! -->
<!-- page header/banner -->
<img src="sitelogo.jpg" />
<!-- sidebar content -->
<!-- main content -->
<!-- page footer -->
<!-- Urgh, I felt dirty writing that. The things I do for you all. -->
For example, in the code example above, the screen reader would pre-announce all elements inside the sidebar as "row 2 column 1", and all elements in the main content with "row 2 column 2" etc.
CSS can, and should, be used to achieve row/column layouts in pages and modules and this layout is transparent to the screen reader user.
If you have legacy code that you wish to make accessible, and are unable to rewrite your entire markup and CSS, a quick fix is to apply role=presentation to the table tag:
<!-- rows and columns go here as normal -->
With this role, visual layout will be maintained but all table, row and column semantics will be removed from the accessibility tree.
Annoyed that you can't use tables for layout anymore, because you find that super useful and CSS floats are a pain?