How to write inner join using posts_clauses?

First, his filter is explained in the manual and is found in the code. If you have questions about hooks and functions, the manual and code is a good place to start looking for answers. The post_clauses hook is passed the associative array to filter, so just manipulate the where and join indices as per your needs. (As per the manual and code, this filter cannot modify table name.)

Also, this kind of question has already been answered, and I’d like to direct your attention to that discussion for coding examples.

UPDATE: OK, @robskrob, here you go! Again, this will not initialize the query object to be blank nor will it filter the table name.

add_filter('post_clauses', function($clauses){
    $clauses['join'] .= " INNER JOIN wp_2_icl_translations ON wp_2_icl_translations.element_id = wp_2_posts.id AND wp_2_icl_translations.language_code="en"";
    $clauses['where'] .= " AND wp_2_posts.post_type="properties"";
    return $clauses;
});