Show parent & child pages with featured image and hide the current page

You need only a bit of logic while setting the parent variable.

After that is better using the standard wordpress function get_pages instead of using a raw $wpdb query.

Then, once you use setup_postdata for the pages, you can use the standard template tags instad of echo the raw page object properties.

Finally after the loop on pages, we have to reset the post data using wp_reset_postdata, because we have altered the global $post variable by calling setup_postdata.

See inline comments for further explainations:

// if we are on a parent page set the $parent variable to current post id
// otherwise set $parent variable to current post parent
$parent = $post->post_parent == 0 ? $post->ID : $post->post_parent;

// if we use current post parent as $paren, exclude the current page
$exclude = $parent == $post->post_parent ? $post->ID : false;

// get all the children
$args = array( 'parent' => $parent, 'sort_column' => 'menu_order' );
if ( $exclude ) $args['exclude'] = $exclude;
$child_pages = get_pages($args);

// show only if there are children
if ( ! empty($child_pages) ) {
  global $post;
  foreach ( $child_pages as $post ) { setup_postdata( $post );
  ?>
  <div class="child-thumb">
    <?php the_post_thumbnail('thumbnail'); ?>
    <a href="https://wordpress.stackexchange.com/questions/114364/<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
  </div>
  <?php
  }
  wp_reset_postdata();
}