I'll give the standard canned response: tables are fine... for representing tabular data.
If you mean using tables for layout, well, that's discouraged. Anything that can be done with a <table> can be done without a table using CSS, but the converse is not true. For example, you could do something like:
<table>
<tbody>
<tr>
<td>SECTION A</td>
<td>SECTION B</td>
<td>SECTION C</td>
</tr>
</tbody>
</table>
Or you could do something like this:
<div class="container-fluid">
<div class="row">
<div class="col-md-4">SECTION A</div>
<div class="col-md-4">SECTION B</div>
<div class="col-md-4">SECTION C</div>
</div>
</div>
Note, those class names come from
Bootstrap [getbootstrap.com] and would give you a 3 column layout with Bootstrap (though there are plenty of other options for achieving this as well), with each column taking 4 (the 4 in "col-md-4") grid columns out of 12 (4/12 == 1/3).
Now, suppose I later decide that I want SECTION A to display on the right instead of on the left, but I want that content to appear first in my document structure for SEO purposes. With the table approach, I don't have any options... I need to modify the HTML to move the first column to the end, and the order of the content will not be what I wanted for SEO purposes:
<table>
<tbody>
<tr>
<td>SECTION B</td>
<td>SECTION C</td>
<td>SECTION A</td>
</tr>
</tbody>
</table>
But without tables, I could use CSS (the presentation layer) to display the first column on the right, and I don't need to touch my HTML content/structure at all. It might be as simple as putting this in my CSS:
.col-md-4:first-child {
float: right;
}
Long story short: avoiding tables for layout will give you a more flexibility, and will be easier to maintain.