Yes, there is definitely a corresponding row in the other table, because if I change the LEFT JOIN to an INNER JOIN it returns that row. Plus, when the query does work, it returns the value I would have expected. Here's the contents of my.cnf: [client] port = 3306 socket = /var/lib/mysql/mysql.sock [mysqld] server-id=3 port = 3306 socket = /var/lib/mysql/mysql.sock key_buffer = 16K max_allowed_packet = 8M sort_buffer_size = 64K net_buffer_length = 2K key_buffer_size=16M ft_min_word_len=3 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [isamchk] key_buffer = 8M sort_buffer_size = 8M [myisamchk] key_buffer = 8M sort_buffer_size = 8M [mysqlhotcopy] interactive-timeout Plus SHOW VARIABLES: mysql> show variables; +---------------------------------+-------------------------------------------------+ | Variable_name | Value | +---------------------------------+-------------------------------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges | ON | | back_log | 50 | | basedir | / | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | | completion_type | 0 | | concurrent_insert | 1 | | connect_timeout | 5 | | datadir | /var/lib/mysql/ | | date_format | %Y-%m-%d | | datetime_format | %Y-%m-%d %H:%i:%s | | default_week_format | 0 | | delay_key_write | ON | | delayed_insert_limit | 100 | | delayed_insert_timeout | 300 | | delayed_queue_size | 1000 | | div_precision_increment | 4 | | engine_condition_pushdown | OFF | | expire_logs_days | 0 | | flush | OFF | | flush_time | 0 | | ft_boolean_syntax | + -><()~*:""&| | | ft_max_word_len | 84 | | ft_min_word_len | 3 | | ft_query_expansion_limit | 20 | | ft_stopword_file | (built-in) | | group_concat_max_len | 1024 | | have_archive | YES | | have_bdb | NO | | have_blackhole_engine | NO | | have_compress | YES | | have_crypt | YES | | have_csv | NO | | have_example_engine | NO | | have_federated_engine | NO | | have_geometry | YES | | have_innodb | YES | | have_isam | NO | | have_ndbcluster | NO | | have_openssl | NO | | have_query_cache | YES | | have_raid | NO | | have_rtree_keys | YES | | have_symlink | YES | | init_connect | | | init_file | | | init_slave | | | innodb_additional_mem_pool_size | 1048576 | | innodb_autoextend_increment | 8 | | innodb_buffer_pool_awe_mem_mb | 0 | | innodb_buffer_pool_size | 8388608 | | innodb_checksums | ON | | innodb_commit_concurrency | 0 | | innodb_concurrency_tickets | 500 | | innodb_data_file_path | ibdata1:10M:autoextend | | innodb_data_home_dir | | | innodb_doublewrite | ON | | innodb_fast_shutdown | 1 | | innodb_file_io_threads | 4 | | innodb_file_per_table | OFF | | innodb_flush_log_at_trx_commit | 1 | | innodb_flush_method | | | innodb_force_recovery | 0 | | innodb_lock_wait_timeout | 50 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_arch_dir | | | innodb_log_archive | OFF | | innodb_log_buffer_size | 1048576 | | innodb_log_file_size | 5242880 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ./ | | innodb_max_dirty_pages_pct | 90 | | innodb_max_purge_lag | 0 | | innodb_mirrored_log_groups | 1 | | innodb_open_files | 300 | | innodb_support_xa | ON | | innodb_sync_spin_loops | 20 | | innodb_table_locks | ON | | innodb_thread_concurrency | 20 | | innodb_thread_sleep_delay | 10000 | | interactive_timeout | 28800 | | join_buffer_size | 131072 | | key_buffer_size | 16777216 | | key_cache_age_threshold | 300 | | key_cache_block_size | 1024 | | key_cache_division_limit | 100 | | language | /usr/share/mysql/english/ | | large_files_support | ON | | large_page_size | 0 | | large_pages | OFF | | license | GPL | | local_infile | ON | | locked_in_memory | OFF | | log | OFF | | log_bin | OFF | | log_bin_trust_function_creators | OFF | | log_error | | | log_slave_updates | OFF | | log_slow_queries | OFF | | log_warnings | 1 | | long_query_time | 10 | | low_priority_updates | OFF | | lower_case_file_system | OFF | | lower_case_table_names | 0 | | max_allowed_packet | 8387584 | | max_binlog_cache_size | 4294967295 | | max_binlog_size | 1073741824 | | max_connect_errors | 10 | | max_connections | 100 | | max_delayed_threads | 20 | | max_error_count | 64 | | max_heap_table_size | 16777216 | | max_insert_delayed_threads | 20 | | max_join_size | 18446744073709551615 | | max_length_for_sort_data | 1024 | | max_relay_log_size | 0 | | max_seeks_for_key | 4294967295 | | max_sort_length | 1024 | | max_tmp_tables | 32 | | max_user_connections | 0 | | max_write_lock_count | 4294967295 | | multi_range_count | 256 | | myisam_data_pointer_size | 6 | | myisam_max_sort_file_size | 2147483647 | | myisam_recover_options | OFF | | myisam_repair_threads | 1 | | myisam_sort_buffer_size | 8388608 | | myisam_stats_method | nulls_unequal | | net_buffer_length | 2048 | | net_read_timeout | 30 | | net_retry_count | 10 | | net_write_timeout | 60 | | new | OFF | | old_passwords | OFF | | open_files_limit | 1024 | | optimizer_prune_level | 1 | | optimizer_search_depth | 62 | | pid_file | /var/lib/mysql/S76017.ltds0001.limiteds.com.pid | | port | 3306 | | preload_buffer_size | 32768 | | protocol_version | 10 | | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 0 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | | range_alloc_block_size | 2048 | | read_buffer_size | 131072 | | read_only | OFF | | read_rnd_buffer_size | 262144 | | relay_log_purge | ON | | relay_log_space_limit | 0 | | rpl_recovery_rank | 0 | | secure_auth | OFF | | server_id | 3 | | skip_external_locking | ON | | skip_networking | OFF | | skip_show_database | OFF | | slave_compressed_protocol | OFF | | slave_load_tmpdir | /tmp/ | | slave_net_timeout | 3600 | | slave_skip_errors | OFF | | slave_transaction_retries | 10 | | slow_launch_time | 2 | | socket | /var/lib/mysql/mysql.sock | | sort_buffer_size | 65528 | | sql_mode | | | sql_notes | ON | | sql_warnings | ON | | storage_engine | MyISAM | | sync_binlog | 0 | | sync_frm | ON | | sync_replication | 0 | | sync_replication_slave_id | 0 | | sync_replication_timeout | 10 | | system_time_zone | GMT | | table_cache | 64 | | table_lock_wait_timeout | 50 | | table_type | MyISAM | | thread_cache_size | 0 | | thread_stack | 196608 | | time_format | %H:%i:%s | | time_zone | SYSTEM | | timed_mutexes | OFF | | tmp_table_size | 33554432 | | tmpdir | | | transaction_alloc_block_size | 8192 | | transaction_prealloc_size | 4096 | | tx_isolation | REPEATABLE-READ | | updatable_views_with_limit | YES | | version | 5.0.16-standard | | version_comment | MySQL Community Edition - Standard (GPL) | | version_compile_machine | i686 | | version_compile_os | pc-linux-gnu | | wait_timeout | 28800 | +---------------------------------+-------------------------------------------------+ Ouput of EXPLAIN: +----+-------------+-------+--------+-------------------+---------+---------+-----------------------------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+-------------------+---------+---------+-----------------------------+------+--------------------------+ | 1 | SIMPLE | bh | const | PRIMARY | PRIMARY | 4 | const | 1 | | | 1 | SIMPLE | b | const | PRIMARY,basket_id | PRIMARY | 4 | const | 1 | | | 1 | SIMPLE | po | const | PRIMARY | PRIMARY | 4 | const | 0 | unique row not found | | 1 | SIMPLE | pcs | system | prod_id | NULL | NULL | NULL | 1 | | | 1 | SIMPLE | pc | index | PRIMARY | PRIMARY | 8 | NULL | 321 | Using index | | 1 | SIMPLE | cp | eq_ref | PRIMARY | PRIMARY | 8 | const,limiteds_v2.pc.cat_id | 1 | Using where; Using index | | 1 | SIMPLE | p | eq_ref | PRIMARY | PRIMARY | 4 | limiteds_v2.cp.prod_id | 1 | Using where | +----+-------------+-------+--------+-------------------+---------+---------+-----------------------------+------+--------------------------+ 7 rows in set (0.00 sec) And finally, here's the query when I first run it, noticed that the promotion_id column is null: mysql> select pcs.promotion_id, b.id, pc.cat_id, pc.top_cat_id, p.prod_id, p.part_code, p.product_type, p.description, p.in_stock, po.option_description, b.price, b.quantity, b.price*b.quantity as total, p.postage_cheap, p.lock_product from basket_header_temp AS bh inner join basket_temp AS b ON bh.basket_id = b.basket_id inner join category_products AS cp ON b.prod_id = cp.prod_id inner join product_categories AS pc ON cp.cat_id = pc.cat_id left join product_options AS po ON b.option_id = po.option_id left join promotional_codes AS pcs ON b.prod_id = pcs.prod_id inner join products AS p ON cp.prod_id = p.prod_id where bh.basket_id = 100000513 and bh.customer_id = -1 and b.id = 8925; +--------------+------+--------+------------+---------+-----------+------------------+-------------------------------------------+----------+--------------------+-------+----------+-------+---------------+--------------+ | promotion_id | id | cat_id | top_cat_id | prod_id | part_code | product_type | description | in_stock | option_description | price | quantity | total | postage_cheap | lock_product | +--------------+------+--------+------------+---------+-----------+------------------+-------------------------------------------+----------+--------------------+-------+----------+-------+---------------+--------------+ | NULL | 8925 | 343 | 29 | 1622 | PCW2005 | Promotional Code | Pre-Xmas 2005 Promotional Email Campaign. | 1 | NULL | -3.00 | 1 | -3.00 | 0 | 1 | +--------------+------+--------+------------+---------+-----------+------------------+-------------------------------------------+----------+--------------------+-------+----------+-------+---------------+--------------+ 1 row in set (0.00 sec) Now the exact same query execute literally seconds afters, notice that the promotion_id column now has the value "christmas", which is what I would expect: mysql> select pcs.promotion_id, b.id, pc.cat_id, pc.top_cat_id, p.prod_id, p.part_code, p.product_type, p.description, p.in_stock, po.option_description, b.price, b.quantity, b.price*b.quantity as total, p.postage_cheap, p.lock_product from basket_header_temp AS bh inner join basket_temp AS b ON bh.basket_id = b.basket_id inner join category_products AS cp ON b.prod_id = cp.prod_id inner join product_categories AS pc ON cp.cat_id = pc.cat_id left join product_options AS po ON b.option_id = po.option_id left join promotional_codes AS pcs ON b.prod_id = pcs.prod_id inner join products AS p ON cp.prod_id = p.prod_id where bh.basket_id = 100000513 and bh.customer_id = -1 and b.id = 8925; +--------------+------+--------+------------+---------+-----------+------------------+-------------------------------------------+----------+--------------------+-------+----------+-------+---------------+--------------+ | promotion_id | id | cat_id | top_cat_id | prod_id | part_code | product_type | description | in_stock | option_description | price | quantity | total | postage_cheap | lock_product | +--------------+------+--------+------------+---------+-----------+------------------+-------------------------------------------+----------+--------------------+-------+----------+-------+---------------+--------------+ | christmas | 8925 | 343 | 29 | 1622 | PCW2005 | Promotional Code | Pre-Xmas 2005 Promotional Email Campaign. | 1 | NULL | -3.00 | 1 | -3.00 | 0 | 1 | +--------------+------+--------+------------+---------+-----------+------------------+-------------------------------------------+----------+--------------------+-------+----------+-------+---------------+--------------+ 1 row in set (0.00 sec) If necessary, I could send you the actually tables and see if you can replicate the problem. Please let me know if you require this and I can send them over. Regards, Kevin Smith