Here's the official word from Drupal.org on node.tpl.php:
This template controls the display of a node, and a node summary.
View the Overview of node.tpl.php at Drupal.org
No really, what is a node? A node is an individual piece of content, so a blog post, a book page, a forum entry and an original
node.tpl.php looks very similar to page.tpl.php. That is no coincidence - node.tpl.php and page.tpl.php are meant to be used together.
node.tpl.php is the template for displaying generic nodes or individual pieces of content. For instance, when you're looking at the perma-link for a blog post you're seeing a single node displaying within the page template. You'll note that the URL for that perma-link will be something like "node/114." So a node is the unique piece of content on any page. Sometime multiple nodes are displayed on a page.
Where page.tpl.php is the template that displays the entire Drupal system, node.tpl.php is the individual piece of content that is outputted within page.tpl.php.
Like all *.tpl.php files this document contains XHTML and some embedded PHP. This particular file becomes the structure for your individual piece of content.
Like page.tpl.php, node.tpl.php is a template file used to override the default output of the theme function theme_node.
The theme_node function looks very similar to theme_page. It's purpose is to return a themed node. The default mark-up that is outputted isn't perfect. Here is an issue with the default output:
*If you have a node.tpl.php file in your theme, this file becomes the default template that is used to display all node types (book, blog, page, forum, etc.).
You can also make *.tpl.php files for each node-type. An easy way to do this is to duplicate the node.tpl.php file and simply rename the filename to node-$type.tpl.php
drupal/themes/my_theme/node.tpl.php
drupal/themes/my_theme/node-book.tpl.php
drupal/themes/my_theme/node-blog.tpl.php
drupal/themes/my_theme/node-page.tpl.php
drupal/themes/my_theme/node-forum.tpl.php
The *.tpl.php file that has a name that corresponds with a recognized node-type (using the syntax above) will take precedence over node.tpl.php.
node-book.tpl.php for instance corresponds to the node type of "book".
We looked at page.tpl.php in box_grey which is a great, simple theme. It does have some limitations though:
The default node.tpl.php mark-up on the other hand is quite usable. It's not nearly as complex as far as structure goes because it does not require any mark-up for layout. It is just the content after all:
<div class="node<?php print ($sticky) ? " sticky" : ""; ?>">
<?php if ($page == 0): ?>
<h2><a href="/<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php print $picture ?>
<div class="info"><?php print $submitted ?><span class="terms"><?php print $terms ?></span></div>
<div class="content">
<?php print $content ?>
</div>
<?php if ($links): ?>
<?php if ($picture): ?>
<br class='clear' />
<?php endif; ?>
<div class="links"><?php print $links ?></div>
<?php endif; ?>
</div>
There is still one small issue with the code above:
<div class="node<?php print ($sticky) ? " sticky" : ""; ?>">
<?php if ($page == 0): ?>
<h2><a href="/<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php print $picture ?>
<div class="info"><?php print $submitted ?><span class="terms"><?php print $terms ?></span></div>
<div class="content">
<?php print $content ?>
</div>
<?php if ($links): ?>
<?php if ($picture): ?>
<?php endif; ?>
<div class="links"><?php print $links ?></div>
<?php endif; ?>
</div>
The <br /> tag has been removed from the above code.
drupal/themes/my_theme/node.tpl.php
You can use the variables on this page to print out dynamic content in your node.tpl.php document.
The following list and descriptions are from Drupal.org
View the PHP syntax used to apply these variable to your *.tpl.php file.