What's the proper use of EntityFieldQuery?
EntityFieldQuery uses a set of hooks to interface with field storage modules, such as Field SQL Storage, in order to work for fields as well as other node properties. Long term, EntityFieldQuery is a much more reliable way to query any type of entity, and in some situations it can perform cross entity queries (see field_has_data or _list_values_in_use() for an example.

Here's a simple example of using EntityFieldQuery to get a list of all nodes published before a specific timestamp:

$query = new EntityFieldQuery();

$query
  -&gt;entityCondition('entity_type', 'node', '=')
  -&gt;propertyCondition('status', 1, '=')
  -&gt;propertyCondition('created', '1294694496', '&lt;');

$result = $query-&gt;execute();


$results from that query would look something like this:

Array
(
    [node] =&gt; Array
        (
            [1] =&gt; stdClass Object
                (
                    [nid] =&gt; 1
                    [vid] =&gt; 49
                    [type] =&gt; article
                )

            [2] =&gt; stdClass Object
                (
                    [nid] =&gt; 2
                    [vid] =&gt; 2
                    [type] =&gt; page
                )

        )

)


You could then use that array as input to node_load_multiple:

$nodes = node_load_multiple(array_keys($result['node']));