You need to reference to your query, when starting the loop, otherwise it will show the posts found with the main query, instead of your custom query.
Try:
<?php
$args = array( 'post_type'=>'book');
$loop = new WP_Query( $args );
// Start the loop for your custom query
if($loop->have_posts() ) : while ($loop->have_posts() ) : $loop->the_post();
the_title(); // just an example, output what you need here
// Get the post terms
$term_list = wp_get_post_terms($post->ID, 'best-book', array("fields" => "all"));
// Iterate the terms, if found
if($term_list) {
foreach($term_list as $term_single) {
echo $term_single;
}
}
endwhile;
// In case the query is empty
else:
// Debug the query
echo '<pre>';
var_dump($loop);
echo '</pre>';
endif;
?>